サービス資格情報の作成
IBM Cloud® Secrets Manager、認証が必要な IBM Cloud リソースへのアクセスに使用するサービス認証情報を作成することができます。
サービス資格情報には、 Identity and Access Management で発行された資格情報を保持できます。 クレデンシャルには、HMAC キー、データベース・ユーザー ID とパスワード、SASL クレデンシャル、 TLS 証明書など、サービス固有のネイティブ・クレデンシャルを使用することもできる。 Secrets Manager を使用して管理できるシークレットの種類について詳しくは、 「シークレットとは?」 を参照してください。
サポートされる IBM Cloud サービス
以下の IBM Cloud サービスのサービス資格情報は、 Secrets Manager を使用して作成できます。
開始前に
開始する前に、必要なレベルのアクセス権限を持っていることを確認してください。 シークレットを作成または追加するには、ライター・サービス・ロールまたはそれ以上が必要です。
アカウント管理者、または必要なレベルのアクセス権を持つエンティティは、 Secrets Manager によって作成および管理されるサービス資格情報を外部から変更することができる。 このようなクレデンシャルが Secrets Manager の外部で削除された場合、サービスが予期せぬ動作をする可能性がある。 例えば、資格情報を作成またはローテーションできない可能性があります。
データベース用に作成されたサービス資格情報の場合、資格情報に加えて、作成された資格情報のデータベース権限も変更すると、サービス資格情報がローテーションされた後にそれらは同期されないことに注意してください。 データベース・サービス資格情報をローテーションする場合、これは ID ローテーションと見なされます。
サービス資格情報の TTL を変更すると、次のシークレット・バージョンのローテーションにのみ適用されます。
Secrets Manager、作成されるサービス・クレデンシャル・シークレットは、リソース・キーの名前にもなる。 たとえば、 my-secret-name という Cloud Object Storage のサービス・クレデンシャル・シークレットは、 Cloud Object Storage の my-secret-name というリソース・キーと一致する。 後で Secrets Manager、シークレットの名前を変更する場合、この変更はリソース・キーには反映されませんが、機能が壊れることはありません。
サービス資格情報に対する IAM サービス・アクセス役割の割り当て
サービス・クレデンシャルを作成するには、 IAM サービス・アクセス・ロールを選択する必要がある。 選択可能な役割は、サポートされているサービスによって異なる場合があります。 関連資料については、 サポートされるサービスのリスト を参照してください。 その後、選択した役割が IAM Service ID に付加されます。この ID は、既存のサービス ID または自動生成されたサービス ID のいずれかになります。
シークレットのローテーションが行われると、サービス ID が引き続き使用されます。 シークレットを削除しても、既存のサービス ID は削除されませんが、自動生成されたサービス ID は削除されます。
既存のサービス ID を使用することを選択した場合は、そのサービス・アクセス・ポリシーを事前構成することもできます。 そのような場合は、シークレットの作成時に役割として 「なし」 を選択します。 IAM ポリシーについて詳しくは、こちらを参照してください。
サービス資格情報のベスト・プラクティス
実動ユース・ケースでは、最小特権アクセスの原則を適用することをお勧めします。
- サービス間許可を設定する場合は、 すべての サービス間ではなく、具体的なソース・サービスとターゲット・サービスの インスタンス間で定義する必要があります。
- サービス資格情報で使用するサービス ID のアクセス権限を手動で設定する場合は、具体的なサービス・インスタンスに適用する必要があります。
UI でのサービス認証情報の作成
Secrets Manager のUIを使用してサービス認証情報を作成するには、以下の手順を実行してください。
-
コンソールで、**「メニュー」**アイコン
**>「リソース・リスト」**をクリックします。
-
サービスのリストから、Secrets Manager のインスタンスを選択します。
-
**「シークレット」テーブルで、「追加」**をクリックします。
-
「シークレットの種類」の一覧から、「 サービス認証情報 」タイルをクリックします。
-
次へ をクリックします。
-
シークレットを容易に識別できる名前と説明を追加します。
-
そのシークレットに割り当てたい シークレットグループインスタンス内に含まれているシークレットが準拠する必要のある環境と制約。 ユーザーをシークレット・グループに関連付けることで、アクセス権限とコラボレーションを有効にできます。 を選択してください。
シークレット・グループがありませんか。 「シークレット・グループ」フィールドで、「作成」 をクリックすると、新規グループの名前と説明を入力できます。 新しいグループにシークレットが自動的に追加されます。 シークレット・グループについて詳しくは、シークレットの編成をチェックしてください。
-
オプション: インスタンス内の類似シークレットを検索しやすくするためのラベルを追加します。
-
クレデンシャルを作成するサービスとサービス・インスタンスを選択する
サービス・インスタンスが初めて選択された場合、またはサービス CRN が指定された場合は、最初に Secrets Manager にサービス・インスタンスへのアクセスを許可します。
- Authorizeをクリックし、 Key Managerを選択します
-
次へ をクリックします。
-
選択したサービスに応じて、要求された入力を指定します。
-
オプション: シークレットまたは特定のバージョンのシークレットにメタデータを追加します。
- ファイルをアップロードするか、メタデータとバージョン・メタデータを JSON 形式で入力してください。
-
オプション:シークレットのリース期間または有効期限(TTL)を設定します。
サービス認証情報のリース期間を設定することで、その認証情報の有効期間を決定します。 サービス認証情報のリース期間が終了すると、自動的に失効します。
-
オプション: シークレットの自動ローテーションを有効にします。
-
次へ をクリックします。
-
シークレットの詳細を確認します。
-
追加 をクリックします。
CLI からのサービス認証情報の作成
Secrets Manager CLI プラグインを使用してサービス資格情報のシークレットを作成するには、 ibmcloud secrets-manager secret-create コマンドを実行します。 --secret-type service_credentials オプションを使用して、シークレットのタイプを指定できます。 例えば、以下のコマンドは、HMAC サポートを使用して、 Cloud Object Storage インスタンスのサービス資格情報を作成します。 また、このクレデンシャルに提供する IAM ロールを指定する(例: Writer )。
ibmcloud secrets-manager secret-create --secret-type="service_credentials" --secret-name="example-service-credentials-secret" --secret-source-service='{"instance": {"crn": "CRN of the instance to create a credential for"},"parameters": {"HMAC": true},"role": {"crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer"}}'
このコマンドでは、シークレットの ID 値と他のメタデータが出力されます。 コマンド・オプションについては、ibmcloud secrets-manager secret-create を参照してください。
API を使用したサービス認証情報の作成
Secrets Manager API を呼び出すことで、プログラムからサービス認証情報を作成できます。
custom_metadata および version_custom_metadata 要求パラメーターを使用して、組織のニーズに関連するメタデータを保管できます。 version_custom_metadata の値は、シークレットのバージョンについてのみ返されます。 シークレットのカスタム・メタデータは、最大 50 バージョンの他のすべてのメタデータとして保管されるため、機密データを含めることはできません。
以下の例では、 Cloud Object Storage のサービス・クレデンシャルを、既存のサービス ID の IAM ID を使用したカスタム・パラメータで作成し、HMAC を有効にしている。 また、このクレデンシャルに提供する IAM ロールを指定する(例: Writer )。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
{
"name": "example-service-credentials-secret",
"description": "Description of my Service Credentials secret",
"secret_type": "service_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"source_service": {
"instance": {
"crn": "CRN of the instance to create a credential for"
},
"parameters": {
"serviceid_crn": "Existing Service ID's IAM ID",
"HMAC": true
},
"role": {
"crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
}
}
}' \ "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
成功すると、シークレットの ID 値が他のメタデータとともに応答で返されます。 必須およびオプションの要求パラメーターについて詳しくは、API リファレンスをチェックしてください。
Terraform を使用したサービス認証の作成
Secrets Managerの Terraformを使用して、サービス認証情報をプログラムで作成できます。 次の例は Cloud Object Storage用のサービス認証情報を作成する際に使用できる構成を示しています。
resource "ibm_sm_service_credentials_secret" "my_service_credentials_secret" {
instance_id = "local.instance_id"
region = "local.region"
name = "example-service-credentials-secret"
secret_group_id = "ibm_sm_secret_group.sm_secret_group_test.secret_group_id"
description = "Description of my Service Credentials secret"
ttl = "24h"
source_service {
role = {
crn = "crn:v1:bluemix:public:iam::::serviceRole:Writer"
},
instance = {
crn = "crn:v1:bluemix:public:cloud-object-storage:global:a/347df6de25020f0fa8b711c6d9881111:f35e85fc-3d4d-476e-8547-51222e3c1111::"
},
parameters = {
HMAC: true
}
}
rotation {
auto_rotate = true
interval = 1
unit = "day"
}
}
Terraform IBM Modules (TIM) for Secrets Manager Secret を使って、サービス認証情報を自動ローテーションでデプロイする。 Terraform IBM Modulesで 例を確認してください。