IAM 資格情報の作成
IBM Cloud® Secrets Manager を使用して、IAM 認証を必要とする IBM Cloud リソースにアクセスするための IAM 資格情報を動的に生成できます。
IAM 認証情報は、 IBM Cloud リソースにアクセスするために使用できる 動的な秘密情報保護リソースへのアクセスを必要とするアプリケーションのために、動的に作成されてリースされる固有値 (パスワードや API キーなど)。 動的シークレットがリースの終了に達すると、保護リソースへのアクセスが取り消され、そのシークレットが自動的に削除されます。です。 IAM 資格情報のセットは、保護リソースを読み取るまたはアクセスするときに毎回生成されるサービス ID と API キーで構成されます。 IAM 資格情報の存続時間 (TTL) またはリース期間を作成時に定義することにより、シークレットが存在する時間を短くすることができます。
ユーザーが Secrets Manager で管理できるシークレットのタイプについて詳しくは、シークレットの概要を参照してください。
開始前に
開始する前に、必要なレベルのアクセス権限を持っていることを確認してください。 シークレットを作成または追加するには、ライター・サービス・ロールまたはそれ以上が必要です。
IAM クレデンシャルは、サービス内で作成または管理を開始する前に、設定ステップが必要です。 詳細については、IAM 資格情報エンジンの構成を参照してください。
IAM 資格情報シークレットの TTL を変更すると、次のシークレット・バージョンのローテーションにのみ適用されます。
Secrets Manager が作成するIAMクレデンシャル・シークレットは、IAM APIキーの名前にもなる。 例えば、my-secret-name というシークレットは、Secrets-Manager-IAM-Secret-my-secret-name というAPIキーと一致します。 後で Secrets Manager でシークレットの名前を変更する場合、この変更はIAMには反映されませんが、機能が壊れることはありません。
アカウント管理者(または必要なアクセスレベルを持つエンティティ)は、 Secrets Manager によって作成および管理される IAM クレデンシャルを外部で変更できる。 このようなサービスIDやAPIキーが Secrets Manager の外部で削除された場合、サービスが予期せぬ動作をする可能性がある。 例えば、資格情報を作成またはローテートできない場合があります。
UI での IAM 資格情報の作成
Secrets Manager UI を使用して IAM 資格情報を作成するには、以下のステップを実行します。
-
コンソールで、**「メニュー」**アイコン
**>「リソース・リスト」**をクリックします。
-
サービスのリストから、Secrets Manager のインスタンスを選択します。
-
**「シークレット」テーブルで、「追加」**をクリックします。
-
シークレット・タイプのリストから、**「IAM 資格情報」**タイルをクリックします。
-
次へ をクリックします。
-
シークレットを容易に識別できる名前と説明を追加します。
-
シークレットに割り当てる シークレットグループをインスタンス内に含まれているシークレットが準拠する必要のある環境と制約。 ユーザーをシークレット・グループに関連付けることで、アクセス権限とコラボレーションを有効にできます。 選択します。
シークレット・グループがありませんか。 「シークレット・グループ」フィールドで、「作成」 をクリックすると、新規グループの名前と説明を入力できます。 新しいグループにシークレットが自動的に追加されます。 シークレット・グループについて詳しくは、シークレットの編成をチェックしてください。
-
オプション: インスタンス内の類似シークレットを検索しやすくするためのラベルを追加します。
-
オプション: シークレットまたは特定のバージョンのシークレットにメタデータを追加します。
- ファイルをアップロードするか、メタデータとバージョン・メタデータを JSON 形式で入力します。
-
次へ をクリックします。
-
シークレットのリース期間、つまり存続時間 (TTL) を設定します。
IAM 資格情報のリース期間を設定することにより、関連する API キーが有効であり続ける期間を決定します。 IAM 資格情報は、そのリースの終わりに達すると、自動的に取り消されます。
最小継続時間は1分です。 最大は90日です。
- オプション: シークレットの IAM 資格情報の再使用できるかどうかを決定します。
- オプション: シークレットの自動ローテーションを有効にします。 シークレットを自動的にローテーションできるのは、IAM クレデンシャルを再利用する オプションが選択されている場合だけです。
- 次へ をクリックします。
- ソースアカウントを決定する。
- 割り当てるアクセス範囲 を決定します。
- 次へ をクリックします。
- シークレットの詳細を確認します。
- 追加 をクリックします。
リース期間が切れるまで、同じ API キーを再利用する
IAM 資格情報は、サービス ID と API キーで構成されています。 サービス ID と API キーはデフォルトで、IAM 資格情報のシークレットが読み取りまたはアクセスされるたびに生成、削除されるシングルユースの一時的な値です。
これらの資格情報をシークレットのリース終了まで継続して使用したい場合は、**「リース期限切れまで IAM 資格情報を再使用する」を「オン」**に設定します。 このオプションを有効にすると、シークレットは現在のサービスIDとAPIキーの値を保持し、シークレットが有効な間、各読み取りでそれらを再利用します。 シークレットのリースが終了すると、資格情報は自動的に取り消されます。
IAM 資格情報の再利用オプションが Off に設定されている場合、シークレットの手動ローテーションはサポートされません。 詳しくは、 シークレットの手動ローテート を参照してください。
ソースアカウントの決定
Secrets Managerは、現在のIBM Cloudアカウント、または特定のIBM CloudアカウントからIAMクレデンシャル・シークレットを作成・管理できます。 特定のアカウントから作成する場合は、そのアカウントのIDを入力してください。
割り当てるアクセス範囲を決定する
すでにアカウントにAPIキーを生成したいサービスIDがある場合は、そのサービスIDを選択してください。 また、アクセス・グループにアクセス権を割り当てることで、サービスIDとAPIキーの両方を生成することもできる。
IAM 資格情報の作成ウィザードのアクセス権の割り当てステップで、シークレットのアクセス範囲を選択します。
-
既存のサービス IDを使用するには、リストから ID を選択します。 ソースアカウントが特定の他のアカウントである場合は、サービスIDのIDを以下のフォーマットで入力してください:
ServiceId-c0c7cfa4-b24e-4917-ad74-278f2fee5ba0.Secrets Manager オプションは、サービス ID 自体ではなく、 IAM 資格情報シークレットの API キーのみを生成、管理する必要がある場合に選択します。 API キーは、アカウントから選択したサービス ID のアクセス・ポリシーを継承します。 表示されるのは、アクセス権限のあるサービス ID のみです。
-
シークレットに新しいサービス ID と API キーの両方を生成するには、アクセス・グループを選択します。 ソース・アカウントが特定のアカウントである場合は、必要なアクセス・グループのIDを指定する。
アクセスグループを選択することで、アクセスグループを使用してサービスIDとAPIキーに割り当てられる権限の範囲を決定します。 サービスIDとAPIキーが生成され、新しいIAMクレデンシャルに関連付けられます。 最大 10 個のアクセス・グループを割り当てることができます。
アクセスポリシーは、サービスIDに直接ではなく、選択したアクセスグループに割り当てる必要があります。 IAMクレデンシャルのTTLに達すると、サービスIDとAPIキーの両方が削除され、新しいものが作成される。
既存のサービスIDを使用した場合、 Secrets Manager によって生成されたAPIキーは自動的にロックされます。 アクセスグループを選択した場合、 Secrets Manager がシークレット用に作成する新しいサービス ID と API キーの両方が自動的にロックされます。 API を使用して IAM 資格情報の秘密を取得する たびに、 Secrets Manager が生成する API キーとサービス ID はロックされる。たとえ、秘密を取得する前に手動でロックを解除したとしても。
CLI からの IAM 資格情報の作成
始める前に、CLIのドキュメント に従ってAPIエンドポイントを設定してください。
Secrets Manager CLIプラグインを使用してサービスIDとAPIキーを作成するには、次のコマンドを実行します。 ibmcloud secrets-manager secret-create コマンドを実行します。 特定の他のアカウントで作成するには、--iam-credentials-account-id オプションを追加します。
ibmcloud secrets-manager secret-create --secret-type iam_credentials --secret-name "example-iam-credentials-secret" --secret-description "Description of my IAM credentials secret" --iam-credentials-access-groups ["<access_group_id>, ..."] --secret-ttl 30m --iam-credentials-reuse-apikey true
既存のサービスIDを使用し、Secrets Manager CLIプラグインを使用してAPIキーを作成するには、ibmcloud secrets-manager secret-create コマンドを実行します。 特定の他のアカウントで作成するには、--iam-credentials-account-id オプションを追加します。
ibmcloud secrets-manager secret-create --secret-type iam_credentials --secret-name "example-iam-credentials-secret" --secret-description "Description of my IAM credentials secret" --iam-credentials-service-id "ServiceId-c0c7cfa4-b24e-4917-ad74-278f2fee5ba0" --secret-ttl 90d --iam-credentials-reuse-apikey true
サービスIDの ID 値は、コンソールのIAMセクションで確認できる。 管理 > アクセス(IAM) > サービスID > 名前. 詳細をクリックするとIDが表示されます。
このコマンドでは、シークレットの ID 値と他のメタデータが出力されます。 コマンド・オプションについては、ibmcloud secrets-manager secret-create を参照してください。
リース期間が切れるまで、同じ API キーを再利用する
シークレットのリース終了までIAM認証情報を使い続けたい場合は、 --iam-credentials-reuse-apikey。 true に設定した場合、シークレットは現在のサービスIDとAPIキーの値を保持し、シークレットが有効である間、各読み取り時にそれらを再利用する。そうでない場合は、 false に設定する。 例えば、次のコマンド例は、有効期限が切れるまで再利用できるIAMクレデンシャルを作成する。
ibmcloud secrets-manager secret-create --secret-type iam_credentials --secret-name "example-iam-credentials-secret" --secret-description "Description of my IAM credentials secret" --iam-credentials-service-id "<iam_id_of_service_id>" --secret-ttl 30m --iam-credentials-reuse-apikey true
このコマンドでは、シークレットの ID 値と他のメタデータが出力されます。 シークレットのリースが終了すると、資格情報は自動的に取り消されます。 コマンド・オプションについては、ibmcloud secrets-manager secret-create を参照してください。
IAM クレデンシャルで --iam-credentials-reuse-apikey が false に設定されている場合、シークレットの手動ローテーションはサポートされません。 詳細については、シークレットの手動ローテーションを参照してください。
API を使用した IAM 資格情報の作成
IAM 資格情報は、Secrets Manager API を呼び出すことによってプログラムで作成できます。
以下の例では、サービスIDとAPIキーを作成するために使用できるクエリーを示している。 API を呼び出す場合は、ID 変数と IAM トークンを、ご使用の Secrets Manager インスタンス固有の値で置き換えます。 特定の他のアカウントで作成するには、account_id フィールドを追加します。
custom_metadata および version_custom_metadata 要求パラメーターを使用して、組織のニーズに関連するメタデータを保管できます。 version_custom_metadata の値は、シークレットのバージョンについてのみ返されます。 シークレットのカスタム・メタデータは、最大 50 バージョンの他のすべてのメタデータとして保管されます。機密データを含めることはできません。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
{
"name": "example-iam-credentials-secret",
"description": "Description of my IAM Credentials secret",
"secret_type": "iam_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"ttl": "30m",
"access_groups": [
"AccessGroupId-45884031-54be-4dd7-86ff-112511e92699",
"AccessGroupId-8c0ed733-dfee-4a94-992b-e2247b86e2a2"
],
"reuse_api_key": false,
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"version_custom_metadata": {
"custom_version_key": "custom_version_value"
}
}' \ "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
成功すると、シークレットの ID 値が他のメタデータとともに応答で返されます。 必須およびオプションの要求パラメーターについて詳しくは、API リファレンスをチェックしてください。
リース期間が切れるまで、同じ API キーを再利用する
シークレットのリース期間終了までIAMクレデンシャルを使いたい場合は、 reuse_api_key。 trueに設定した場合、シークレットは現在のサービスIDとAPIキーの値を保持し、シークレットが有効である間、読み取りのたびにそれらの値を再使用します。 例えば、次のコマンド例は、有効期限が切れるまで再利用できるIAMクレデンシャルを作成する。
custom_metadata および version_custom_metadata 要求パラメーターを使用して、組織のニーズに関連するメタデータを保管できます。 version_custom_metadata の値は、シークレットのバージョンについてのみ返されます。 シークレットのカスタム・メタデータは、最大 50 バージョンの他のすべてのメタデータとして保管されます。機密データを含めることはできません。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
{
"name": "example-iam-credentials-secret",
"description": "Description of my IAM Credentials secret",
"secret_type": "iam_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"ttl": "30m",
"access_groups": [
"AccessGroupId-45884031-54be-4dd7-86ff-112511e92699",
"AccessGroupId-8c0ed733-dfee-4a94-992b-e2247b86e2a2"
],
"reuse_api_key": true,
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"version_custom_metadata": {
"custom_version_key": "custom_version_value"
}
}' \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
リクエストに成功すると、シークレットのID値とその他のメタデータが返されます。 シークレットのリースが終了すると、資格情報は自動的に取り消されます。 詳しくは、APIリファレンスをご確認ください。
IAM資格情報のreuse_api_keyがfalseである場合、シークレットの手動ローテーションはサポートされません。 詳細については、シークレットの手動ローテーションを参照してください。
アカウントの既存のサービス ID の使用
APIキーを動的に生成するために使用するサービスIDがアカウントに既に登録されている場合があります。 このシナリオでは、独自のサービス ID を使用して、IAM 資格情報シークレットを作成することを選択できます。 例えば、以下のコマンドはservice_idフィールドを使用してIAM資格情報を作成します。 特定の他のアカウントで作成するには、account_id フィールドを追加します。
custom_metadata および version_custom_metadata 要求パラメーターを使用して、組織のニーズに関連するメタデータを保管できます。 version_custom_metadata の値は、シークレットのバージョンについてのみ返されます。 シークレットのカスタム・メタデータは、最大 50 バージョンの他のすべてのメタデータとして保管されます。機密データを含めることはできません。
サービスIDの ID 値は、コンソールのIAMセクションで確認できる。 管理 > アクセス(IAM) > サービスID > 名前. 詳細をクリックするとIDが表示されます。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "example-iam-credentials-secret",
"description": "Description of my IAM Credentials secret",
"secret_type": "iam_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"ttl": "30m",
"service_id": "ServiceId-c0c7cfa4-b24e-4917-ad74-278f2fee5ba0,
"reuse_api_key": false,
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"version_custom_metadata": {
"custom_version_key": "custom_version_value"
}
}' \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
リクエストに成功すると、シークレットのID値とその他のメタデータが返されます。 詳しくは、APIリファレンスをご確認ください。
Terraform を使用した IAM 資格情報の作成
Secrets Managerの Terraform を使用して、IAM 資格情報をプログラマチックに作成できます。
depends_on Terraform メタ引数を追加し、それを IAM 構成リソースに参照する必要があります。 depends_on メタ引数は、IAM 資格情報のシークレットに対してアクションを実行する前に、IAM 構成に対するすべてのアクションを完了するように Terraform に指示します。 クロスアカウント IAM クレデンシャルシークレットを作成する場合は、 account_id プロパティを指定し、サービス
ID が作成された IBM Cloud アカウントを指すようにします。
以下の例は、IAM 資格情報を作成するために使用できる構成を示しています。
resource "ibm_sm_iam_credentials_secret" "test_iam_credentials_secret" {
instance_id = local.instance_id
region = local.region
service_id = "ServiceId-f4b2deac-fbb5-4bf7-85de-88426701db97"
ttl = "1800"
name = "test-iam-credentials-secret"
reuse_api_key = true
secret_group_id = ibm_sm_secret_group.sm_secret_group_test.secret_group_id
depends_on = [
ibm_sm_iam_credentials_configuration.iam_credentials_configuration
]
}
Terraform IBM Modules (TIM) for Secrets Manager Secret を使って IAM クレデンシャル生成を自動化し、一貫性のあるバージョン管理されたデプロイメントを実現します。 Terraform IBM モジュールについて 学ぶ。
IAM 資格情報の削除
IAM 資格情報シークレット・エンジンによって生成されたサービス ID または API キーがあり、 Secrets Managerのインスタンスを削除する場合は、そのシークレットも IAM から削除する必要があります。 詳しくは、ユーザーの API キーの管理を参照してください。