IBM Cloud Docs
サービス資格情報の作成

サービス資格情報の作成

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によって作成されるサービス・クレデンシャル・シークレットは、リソース・キーの名前にもなる。 たとえば、Cloud Object Storage の my-secret-name というサービス クレデンシャル シークレットは、Cloud Object Storage の my-secret-name というリソース キーと一致します。 Secrets Managerにあるsecretの名前を後で変更する場合、この変更はリソースキーには反映されませんが、機能が壊れることはありません。

サービス資格情報に対する IAM サービス・アクセス役割の割り当て

サービス資格情報を作成するには、 IAM サービス・アクセス役割 を選択する必要があります。 選択可能な役割は、サポートされているサービスによって異なる場合があります。 関連資料については、 サポートされるサービスのリスト を参照してください。 その後、選択した役割が IAM Service ID に付加されます。この ID は、既存のサービス ID または自動生成されたサービス ID のいずれかになります。

シークレットのローテーションが行われると、サービス ID が引き続き使用されます。 シークレットを削除しても、既存のサービス ID は削除されませんが、自動生成されたサービス ID は削除されます。

既存のサービス ID を使用することを選択した場合は、そのサービス・アクセス・ポリシーを事前構成することもできます。 そのような場合は、シークレットの作成時に役割として 「なし」 を選択します。 IAM ポリシーについて詳しくは、こちらを参照してください

サービス資格情報のベスト・プラクティス

実動ユース・ケースでは、最小特権アクセスの原則を適用することをお勧めします。

  1. サービス間許可を設定する場合は、 すべての サービス間ではなく、具体的なソース・サービスとターゲット・サービスの インスタンス間で定義する必要があります。
  2. サービス資格情報で使用するサービス ID のアクセス権限を手動で設定する場合は、具体的なサービス・インスタンスに適用する必要があります。

UIでサービス資格情報を作成する

Secrets Manager を使用してサービス認証情報を作成するには、以下の手順に従います。

  1. コンソールで、**「メニュー」**アイコン「メニュー」アイコン **>「リソース・リスト」**をクリックします。

  2. サービスのリストから、Secrets Manager のインスタンスを選択します。

  3. **「シークレット」テーブルで、「追加」**をクリックします。

  4. 秘密のタイプの一覧から 、「サービス資格情報 」のタイルをクリックします。

  5. 次へ をクリックします。

  6. シークレットを容易に識別できる名前と説明を追加します。

  7. 秘密に割り当てたい 秘密グループインスタンス内に含まれているシークレットが準拠する必要のある環境と制約。 ユーザーをシークレット・グループに関連付けることで、アクセス権限とコラボレーションを有効にできます。 を選択します。

    シークレット・グループがありませんか。 「シークレット・グループ」フィールドで、「作成」 をクリックすると、新規グループの名前と説明を入力できます。 新しいグループにシークレットが自動的に追加されます。 シークレット・グループについて詳しくは、シークレットの編成をチェックしてください。

  8. オプション: インスタンス内の類似シークレットを検索しやすくするためのラベルを追加します。

  9. 資格情報を作成する対象のサービスおよびサービス・インスタンスを選択します

    サービス・インスタンスが初めて選択された場合、またはサービス CRN が指定された場合は、最初に Secrets Manager にサービス・インスタンスへのアクセスを許可します。

    1. 「許可」 をクリックし、 「鍵マネージャー」 を選択します。
  10. 次へ をクリックします。

  11. 選択したサービスに応じて、要求された入力を指定します。

  12. オプション: シークレットまたは特定のバージョンのシークレットにメタデータを追加します。

  13. ファイルをアップロードするか、メタデータとバージョン・メタデータを JSON 形式で入力してください。

  14. オプション:シークレットのリース期間またはタイム・トゥ・ライブ(TTL)を設定します。

サービス認証のリース期間を設定することで、関連する認証が有効である期間を決定します。 サービス認証がリース期間を終了すると、自動的に無効となります。

  1. オプション: シークレットの自動ローテーションを有効にします。
  2. 次へ をクリックします。
  3. シークレットの詳細を確認します。
  4. 追加 をクリックします。

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を呼び出すことで、プログラム的にサービス認証情報を作成することができます。

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"
      }
    }