暗号化された AWS Secrets Manager シークレットへのアクセスに関する問題を解決する方法を教えてください。

所要時間2分
0

AWS Secrets Manager シークレットの取得や、それへのアクセスをしたいのですが、エラーが表示されます。

解決策

Secrets Manager シークレットの取得や、アクセスができない場合は、次のいずれかのエラーが表示されることがあります。 

  • 「シークレットをデフォルトの KMS サービスキーで暗号化すると、別の AWS アカウントからシークレットにアクセスすることはできません」
  • 「KMS へのアクセスは許可されていません」
  • 「InternalFailure」
  • 「不明なエラーが発生しました」
  • 「KMS へのアクセスは許可されていません。このバージョンのシークレットは、現在の KMS キーでは暗号化されません」

これらのエラーをトラブルシューティングするには、次の手順を実行します。

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、使用しているのが最新バージョンの AWS CLI であることを確認してください

別のアカウントのシークレットにアクセスするときに、シークレットが AWS KMS のマネージドキーで暗号化されていないかを確認する。

AWS マネージドキーポリシーは読み取り専用のため編集できません。ただし、AWS Key Management Service (AWS KMS) のマネージドキーポリシーとカスタマーマネージドキーポリシーを表示することはできます。AWS KMS のマネージドキーポリシーは編集できないため、これらのキーポリシーにクロスアカウント権限を付与することはできません。AWS KMS のマネージドキーを使用して暗号化された Secrets Manager のシークレットには、他の AWS アカウントからはアクセスできません。

クロスアカウントの場合は、ID ベースのポリシーとリソースベースのポリシーで、プリンシパルに AWS KMS キーへのアクセスが許可されていることを確認する。

ID ポリシーでは、プリンシパルに、次のような AWS KMS キーへのアクセスを許可する必要があります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:Region:AccountID:key/EncryptionKey"
    }
  ]
}

リソースベースのポリシーでは、プリンシパルに、次のような AWS KMS キーへのアクセスを許可する必要があります。

{
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::AccountID:user/UserName",
      "arn:aws:iam::AccountID:role/RoleName"
    ]
  },
  "Action": [
    "kms:Decrypt",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}

AWS KMS キーが更新されたら、シークレットが新しい AWS KMS キーで暗号化されているかを確認する。

AWS CLI を使用して Secrets Manager のシークレットに関連付けられた AWS KMS キーを更新しても、現在のバージョンや以前のバージョンのシークレットが新しい KMS キーで再暗号化されることはありません。つまり、シークレットが新しい AWS KMS キーで再暗号化されていないため、外部アカウント (クロスアカウントとも呼ばれます) はシークレットにアクセスできません。クロスアカウントからシークレット値を取得するには、新しい AWS KMS キーでシークレットを再暗号化する必要があります。

注: Secrets Manager コンソールから、デフォルトでシークレットに関連付けられている AWS KMS キーを変更すると、シークレットの新しいバージョンが作成され、新しい AWS KMS キーで暗号化されます。詳細については、「Secret encryption and decryption in AWS Secrets Manager」を参照してください。

新しい AWS KMS キーでシークレットを再暗号化する。

以下の手順に従って、AWS マネジメントコンソールまたは AWS CLI を使用して、新しい AWS KMS キーでシークレットを再暗号化します。

AWS マネジメントコンソール

1.    Secrets Manager コンソールを開きます。

2.    [シークレットの名前] で、シークレットを選択します。

3.    [アクション] を選択し、ドロップダウンリストで AWS KMS キーを選択します。次に [新しい暗号化キーでシークレットの新しいバージョンを作成] チェックボックスをオンにして、[保存] を選択します。

AWS CLI

シークレットが存在するソースアカウントから以下の手順を実行してください。

1.    次のような AWS CLI コマンド get-secret-value を実行します。

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --query SecretString --output text

    {"CrossAccount":"DefaultEncryption"}

2.    creds.txt という名前のファイルを作成します。

$ cat creds.txt

    {"CrossAccount":"DefaultEncryption"}

3.    AWS CLI update-secret コマンドを実行して、次のように暗号化キーを再暗号化します。

.    注: カスタマーマネージドキーを使用する場合は、そのキーに対する kms:GenerateDataKey 権限と kms:Decrypt 権限も必要です。

$ aws secretsmanager update-secret --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --secret-string file://creds.txt

    {
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:cross-account",
    "Name": "cross-account",
    "VersionId": "f68246e8-1cfb-4c3b-952b-17c9298d3462"
    }

4.    次のようなクロスアカウントから AWS CLI コマンド get-secret-value を実行します。

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --version-stage AWSCURRENT --profile

    {"CrossAccount":"DefaultEncryption"}

関連情報

How to use resource-based policies in the AWS Secrets Manager console to securely access secrets across AWS accounts

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

Permissions to AWS Secrets Manager secrets for users in a different account

コメントはありません

関連するコンテンツ