AWS Secrets Manager シークレットを別の AWS アカウントと共有したいです。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
シークレットをアカウント間で共有するには、カスタム AWS Key Management Service (AWS KMS) キーを作成して指定する必要があります。シークレットをアカウント間で共有する場合、デフォルトの KMS キーは使用できません。デフォルトの KMS キーは、AWS KMS で実行される AWS サービスによって、お客様に代わって作成、管理、使用されます。アカウントと AWS リージョンに固有のもので、作成したサービスでのみ使用できます。詳細については、「AWS KMS キー」を参照してください。
シークレットを所有するアカウントを設定する
シークレットがない場合は、Secrets Manager シークレットを作成してください。シークレットの KMS キー ID パラメータに Amazon リソースネーム (ARN) が指定されていることをご確認ください。
エイリアスを使用する既存のシークレットがある場合は、シークレットを変更します。シークレットの KMS キー ID パラメータに KMS キー ARN が指定されていることをご確認ください。別のアカウントからシークレットにアクセスするには、完全な KMS キー ARN を使用する必要があります。
重要: 以下のポリシーでは、プリンシパル ARN を送信先アカウントの ARN に、SecretARN を送信元アカウントの ARN に、KMS キー ARN を送信元アカウントの ARN に置き換えてください。YOUR-REGION は、お使いのリージョンに置き換えてください。
キーポリシーに次のステートメントを追加し、サンプル値を適切な値に置き換えてください。
{ "Sid": "AllowUseOfTheKey",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::444455556666:user/username"
},
"Action": [
"kms:Decrypt"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:ViaService": "secretsmanager.YOUR-REGION.amazonaws.com"
},
"StringLike": {
"kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:YOUR-REGION:111122223333:secret:secretname??????"
}
}
}
次に、リソースベースのポリシーをアタッチして、AWS Identity and Access Management (IAM) ロールにシークレットへのアクセス許可を付与します。
シークレットリソースベースのポリシーの例:
{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::444455556666:user/username"
},
"Action": "secretsmanager:GetSecretValue",
"Resource": "*"
}
]
}
シークレットを必要とする他のアカウントでアクセス許可を設定します
IAM ユーザーがシークレットを取得するには、secretsmanager:GetSecretValue アクセス許可が必要です。また、シークレットが KMS キーで暗号化されている場合、IAM ユーザーには復号権限が必要です。
シークレットを取得したい IAM アイデンティティに secretsmanager:GetSecretValue アクセス許可をアタッチします。
ポリシーの例:
{ "Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGetSecretValue",
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": [
"arn:aws:secretsmanager:your-region:777788889999:secret:secretname-??????"
]
},
{
"Sid": "AllowKMSDecrypt",
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:YOUR-REGION:777788889999:key/secretnameKMS_id"
]
}
]
}
次に、次の get-secret-value コマンドを実行して、シークレットをソースシークレット値として取得します。
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:YOUR-REGION:777788889999:secret:secretname --version-stage AWSCURRENT --region YOUR-REGION
関連情報
別のアカウントから AWS Secrets Manager シークレットにアクセスする
リソースベースのポリシーをアタッチして AWS アカウント全体のシークレットにアクセスする方法を教えてください
暗号化された Secrets Manager シークレットを取得しようとすると発生する、AWS KMS キーアクセスエラーを解決する方法を教えてください