AWS シークレットマネージャー

AWS Secrets Manager をバックエンドとして使用する場合、構成を /application/ に配置するか、アプリケーションの default プロファイルに配置することで、すべてのアプリケーションと構成を共有できます。例: 次のキーを使用してシークレットを追加すると、構成サーバーを使用するすべてのアプリケーションで、プロパティ shared.foo および shared.bar を使用できるようになります。

secret name = /secret/application-default/
secret value =
{
 shared.foo: foo,
 shared.bar: bar
}

または

secret name = /secret/application/
secret value =
{
 shared.foo: foo,
 shared.bar: bar
}

ラベル付きバージョン

AWS Secrets Manager リポジトリでは、Git バックエンドと同じように、設定環境のラベル付きバージョンを保持できます。

リポジトリの実装は、HTTP リソースの {label} パラメーターを AWS Secrets Manager シークレットのステージングラベル [Amazon] にマップします。ラベル付きシークレットを作成するには、シークレットを作成するか、その内容を更新して、ステージングラベルを定義します (AWS ドキュメントではバージョンステージと呼ばれることがあります)。例:

$ aws secretsmanager create-secret \
      --name /secret/test/ \
      --secret-string '{"version":"1"}'
{
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:secret:/secret/test/-a1b2c3",
    "Name": "/secret/test/",
    "VersionId": "cd291674-de2f-41de-8f3b-37dbf4880d69"
}

$ aws secretsmanager update-secret-version-stage \
      --secret-id /secret/test/ \
      --version-stage 1.0.0 \
      --move-to-version-id cd291674-de2f-41de-8f3b-37dbf4880d69

{
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:secret:/secret/test/-a1b2c3",
    "Name": "/secret/test/",
}

デフォルトのラベルを設定するには、spring.cloud.config.server.aws-secretsmanager.default-label プロパティを使用します。プロパティが定義されていない場合、バックエンドは AWSCURRENT をステージングラベルとして使用します。

spring:
  profiles:
    active: aws-secretsmanager
  cloud:
    config:
      server:
        aws-secretsmanager:
          region: us-east-1
          default-label: 1.0.0

デフォルトのラベルが設定されておらず、リクエストでラベルが定義されていない場合、リポジトリは、ラベル付きバージョンのサポートが無効になっているかのようにシークレットを使用することに注意してください。また、デフォルトのラベルは、ラベル付きサポートが有効になっている場合にのみ使用されます。そうでなければ、このプロパティを定義しても意味がありません。

ステージングラベルにスラッシュ (/) が含まれている場合、HTTP URL のラベルは代わりに特別な文字列 ({special-string}) で指定する必要があることに注意してください (他の URL パスとのあいまいさを避けるため) Git バックエンドのセクションが説明するのと同じ方法です。

spring.cloud.config.server.aws-secretsmanager.ignore-label プロパティを使用して、HTTP リソースの {label} パラメーターおよび spring.cloud.config.server.aws-secretsmanager.default-label プロパティを無視します。リポジトリは、ラベル付きバージョンのサポートが無効になっているかのようにシークレットを使用します。

spring:
  profiles:
    active: aws-secretsmanager
  cloud:
    config:
      server:
        aws-secretsmanager:
          region: us-east-1
          ignore-label: true