AWS アカウント間で AWS Secrets Manager のシークレットを共有するにはどうすればよいですか?

最終更新日: 2020 年 10 月 14 日

自分の AWS Secrets Manager のシークレットを別の AWS アカウントと共有したいと考えています。どうすればよいですか?

簡単な説明

この例では、Security_Account ユーザーは認証情報を管理し、Dev_Account ユーザーは開発者が使用します。AWS Identity and Access Management (IAM) ユーザーまたはお使いの Dev_Account の Amazon Elastic Compute Cloud (Amazon EC2) で実行されているアプリケーションは、Security_Account ユーザーアカウントでシークレットを取得します。リソースベースのポリシーを使用することができます。これにより、シークレットにアクセス許可ポリシーをアタッチすることができます。このポリシーを使用して、Dev_Account からの IAM エンティティが Security_Account のシークレットにアクセスすることを許可できます。

Security_Account の DevSecret という名前のシークレットが、AWS KMS キー DevSecretKMS を使用して暗号化されます。その後、シークレットが Dev_Account と共有されます。

注意: アカウントに KMS デフォルトキーを使用することはできません。KMS デフォルトキーは、AWS Key Management Service (KMS) で実行される AWS のサービスが、ユーザーに代わって作成、管理、および使用します。KMS デフォルトキーは、AWS アカウントおよびリージョンに一意です。AWS マネージドキーを使用できるのは、それを作成したサービスだけです。詳細については、「AWS KMS keys」を参照してください。

解決方法

1.    シークレットがない場合は、「Creating a basic secret」の手順に従ってください。シークレットの KMS キー ID パラメータには、Amazon リソースネーム (ARN) を指定するようにしてください。

2.    エイリアスを使用する既存のシークレットがある場合は、「Modifying a Secret」の手順に従ってください。シークレットの KMS キー ID パラメータには、KMS キー ARN を指定するようにしてください。

注意: 別の AWS アカウントからのシークレットにアクセスするには、完全な KMS キー ARN を使用する必要があります。

3.    次のように、IAM ID にアクセス許可をアタッチします。

注意: your-region をお使いの AWS リージョンに置き換えてください。

{<br>    "Version": "2012-10-17",<br>    "Statement": [<br>        {<br>            "Sid": "AllowGetSecretValue",<br>            "Effect": "Allow",<br>            "Action": [<br>                "secretsmanager:GetSecretValue"<br>            ],<br>            "Resource": [<br>                "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"<br>            ]<br>        },<br>        {<br>            "Sid": "AllowKMSDecrypt",<br>            "Effect": "Allow",<br>            "Action": [<br>                "kms:Decrypt"<br>            ],<br>            "Resource": [<br>                "arn:aws:kms:your-region:Security_Account:key/DevSecretKMS_id"<br>            ]<br>        }<br>    ]<br>}

Dev_Account の IAM ユーザー SecretsUser がシークレットを取得します。SecretsUser には、 secretsmanager:GetSecretValue に対するアクセス許可が必要です。DevSecret は DevSecretKey を使って暗号化されるため、SecretsUser に AWS 復号化アクセス許可が必要です。

4.    KMS キーのキーポリシーで許可を付与します。Secrets Manager は、デフォルトでシークレットを暗号化します。これらのシークレットを取得するアイデンティティには、復号化を行うためのアクセス権が必要です。DevSecret は DevSecretKMS を使用して暗号化されているため、以下の許可を追加してキーポリシーを変更する必要があります。

注意: your-region をお使いの AWS リージョンに置き換えてください。

{<br>    "Sid": "AllowUseOfTheKey",<br>    "Effect": "Allow",<br>    "Principal": {<br>        "AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"<br>    },<br>    "Action": [<br>        "kms:Decrypt"<br>    ],<br>    "Resource": "*",<br>    "Condition": {<br>        "StringEquals": {<br>            "kms:ViaService": "secretsmanager.your-region.amazonaws.com"<br>        },<br>        "StringLike": {<br>            "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"<br>        }<br>    }<br>}

このポリシーは、DevSecretKMS を使用するための許可を SecretsUser に付与します。このポリシーは、DevSecretKMS で decrypt コマンドと describe-key コマンドを使用する能力も SecretsUser に付与します。

5.    IAM エンティティにシークレットへのアクセスを許可します。Security_Account から、SecretsUser が DevSecret を取得できる許可を付与するリソースベースのポリシーをアタッチします。

{<br>    "Version": "2012-10-17",<br>    "Statement": [<br>        {<br>            "Sid": "AllowUseOfTheKey",<br>            "Effect": "Allow",<br>            "Action": "secretsmanager:GetSecretValue",<br>            "Principal" : {<br>              "AWS" : "arn:aws:iam::Dev_Account:user/SecretsUser"<br>            },<br>            "Resource": "*",<br>            "Condition": {<br>                "ForAnyValue:StringEquals": {<br>                    "secretsmanager:VersionStage": "AWSCURRENT"<br>                }<br>            }<br>        }<br>    ]<br>}<br>

6.    SecretsUser としてシークレットを取得します。

注意: ステップ 5 のポリシーでは、AWSCURRENT バージョンステージへの参照が明示的に必要です。これは、シークレットが次のように SecretsUser によって取得される場合は常に明示的に要求する必要があります。

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret --version-stage AWSCURRENT

すべての IAM エンティティについて、これらの指示を使用できます。たとえば、Amazon EC2 インスタンスプロファイルまたはロールの場合は、リソースポリシーで ARN を置き換えるか追加し、IAM エンティティにアタッチされたアクセス許可を編集します。