IBM Cloud Docs
任意のシークレットの保管

任意のシークレットの保管

IBM Cloud® Secrets Manager を使用すると、IBM Cloud の内部または外部にある保護システムにアクセスするために使用される任意シークレットを保管できます。

任意のシークレットとは、構造化データ/非構造化データ (キー、構成ファイル、その他の機密情報など) を保持するために使用できる一種のアプリケーション・シークレットのことです。 シークレットを作成したら、そのシークレットを使用して、サード・パーティー・アプリやデータベースなどの保護されたリソースにアプリケーションを接続できます。 シークレットは、専用の Secrets Manager サービス・インスタンスに安全に保管され、シークレットのライフサイクルを一元管理できます。

ユーザーが Secrets Manager で管理できるシークレットのタイプについて詳しくは、シークレットの概要を参照してください。

開始前に

開始する前に、必要なレベルのアクセス権限を持っていることを確認してください。 シークレットを作成または追加するには、ライター・サービス・ロールまたはそれ以上が必要です。

UI での任意のシークレットの作成

Secrets Manager UI を使用して任意シークレットを追加するには、以下の手順を実行します。

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

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

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

  4. シークレット・タイプのリストから、**「その他のシークレット」**タイルをクリックします。

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

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

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

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

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

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

    1. ファイルをアップロードするか、メタデータとバージョン・メタデータを JSON 形式で入力します。
  10. 次へ をクリックします。

  11. ファイルを選択するか、シークレットに関連付けるシークレット値を入力します。

Secrets Manager は、任意シークレットに対してのみテキスト・ベースのペイロードをサポートします 任意のシークレットに割り当てるファイルを選択すると、このサービスが base64 エンコードを使用してデータをインスタンスに格納します。 後でこのシークレットにアクセスする場合は、そのシークレットに対して base64 デコードを実行する必要があります。 base64デコードが必要なシークレットを追跡できるように、シークレットに'encode:base64 ようなエンコードされたデータのラベルを割り当てることを検討してください。

  1. オプション:シークレットの有効期限を管理するために、有効期限を有効にする。
  2. シークレットの有効期限を設定するには、有効期限のトグルを**「はい」**に切り替えます。
  3. 次へ をクリックします。
  4. シークレットの詳細を確認します。
  5. 追加 をクリックします。

CLI からの任意のシークレットの作成

始める前に、CLIのドキュメント に従ってAPIエンドポイントを設定してください。

Secrets Manager CLI プラグインを使用して任意のシークレットを作成するには、ibmcloud secrets-manager secret-create コマンドを実行します。 --secret-type arbitrary オプションを使用して、シークレットのタイプを指定できます。 例えば、以下のコマンドでは、任意シークレットが作成され、secret-data が値として保管されます。

Secrets Manager は、任意シークレットに対してのみテキスト・ベースのペイロードをサポートします バイナリー・ファイルをアップロードする必要がある場合は、Secrets Manager CLI に単一行文字列で渡せるように、データを base64 でエンコードする必要があります。 後でシークレットに元の形式でアクセスする場合は、base64 デコードを実行する必要があります。 base64デコードが必要なシークレットを追跡できるように、シークレットに'encode:base64 ようなエンコードされたデータのラベルを割り当てることを検討してください。

ibmcloud secrets-manager secret-create \    
    --secret-prototype='{"custom_metadata": {"anyKey": "anyValue"}, "description": "Description of my arbitrary secret.", "expiration_date": "2023-10-05T11:49:42Z", "labels": ["dev","us-south"], "name": "example-arbitrary-secret", "secret_group_id": "default", "secret_type": "arbitrary", "payload": "secret-data", "version_custom_metadata": {"anyKey": "anyValue"}}'

このコマンドでは、シークレットの ID 値と他のメタデータが出力されます。 コマンド・オプションについては、ibmcloud secrets-manager secret-create を参照してください。

API を使用した任意のシークレットの作成

Secrets Manager API を呼び出すと、任意シークレットをプログラムで作成できます。

以下の例は、任意のシークレットを作成および保管するときに使用できる照会を示しています。 API を呼び出す場合は、ID 変数と IAM トークンを、ご使用の Secrets Manager インスタンス固有の値で置き換えます。

custom_metadata および version_custom_metadata 要求パラメーターを使用して、組織のニーズに関連するメタデータを保管できます。 version_custom_metadata の値は、シークレットのバージョンについてのみ返されます。 シークレットのカスタム・メタデータは、最大 50 バージョンの他のすべてのメタデータとして保管されます。機密データを含めることはできません。

Secrets Manager は、任意シークレットに対してのみテキスト・ベースのペイロードをサポートします バイナリー・ファイルをアップロードする必要がある場合は、Secrets Manager API に単一行文字列で渡せるように、データを base64 でエンコードする必要があります。 後でシークレットに元の形式でアクセスする場合は、base64 デコードを実行する必要があります。 base64デコードが必要なシークレットを追跡できるように、シークレットに'encode:base64 ようなエンコードされたデータのラベルを割り当てることを検討してください。

curl -X POST
    -H "Authorization: Bearer {iam_token}" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d '{
          "custom_metadata": {
            "metadata_custom_key": "metadata_custom_value"
          },
          "description": "Description of my arbitrary secret.",
          "expiration_date": "2023-10-05T11:49:42Z",
          "labels": [
            "dev",
            "us-south"
          ],
          "name": "example-arbitrary-secret",
          "payload": "secret-data",
          "secret_group_id": "67d025e1-0248-418f-83ba-deb0ebfb9b4a",
          "secret_type": "arbitrary",
          "version_custom_metadata": {
          "custom_version_key": "custom_version_value"} }' \
      "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"

成功すると、シークレットの ID 値が他のメタデータとともに応答で返されます。 必須およびオプションの要求パラメーターについて詳しくは、API リファレンスをチェックしてください。

Terraform を使用した任意のシークレットの作成

Secrets Managerの Terraform を使用して、任意のシークレットをプログラマチックに作成できます。

秘密資格情報などの機密性の高い入力変数を保護するための Terraform のベスト・プラクティスに従ってください。 詳しくは、 機密性の高い入力変数の保護 を参照してください。

以下の例は、 terraform.tfvars ファイルに機密性の高い値を設定することによって、任意のシークレットを作成するために使用できる構成を示しています。

  1. variables.tf ファイルで任意のシークレット・ペイロードの入力変数を定義します。

    		variable "arbitrary_secret_payload" {
    			description = "Arbitrary secret payload"
    			type        = string
    			sensitive   = true
    		}
    
  2. terraform.tfvars ファイル内の arbitrary_secret_payload 変数に値を割り当てます。

    .tfvars ファイルを使用して値を設定することにより、残りの変数値から機密性の高い値を分離し、構成を操作するユーザーが機密性の高い値を認識するようにすることができます。 セキュリティー上の理由から、 .tfvars ファイルの保守と共有は、適切なアクセス権限を持つユーザーのみが行う必要があります。 また、機密性の高い値を持つ .tfvars ファイルを、Github などのバージョン管理に平文で保管しないように注意する必要があります。

    	arbitrary_secret_payload = "my sensitive arbitrary payload"
    
  3. main.tf ファイル内に任意のシークレットを作成します。

    	resource "ibm_sm_arbitrary_secret" "sm_arbitrary_secret" {
    		instance_id = local.instance_id
    		region = local.region
    		description = "Extended description for this arbitrary secret"
    		labels = [ "tf-resource"]
    		name = "test-arbitrary-secret"
    		secret_group_id = ibm_sm_secret_group.sm_secret_group_test.secret_group_id
    		payload = var.arbitrary_secret_payload
    	}