暗号化された 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 キーで暗号化されます。詳細については、「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"}

関連情報

AWS Secrets Manager コンソールでリソースベースのポリシーを使用して AWS アカウント全体のシークレットに安全にアクセスする方法

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

別のアカウントのユーザーに対する AWS Secrets Manager シークレットへの権限

コメントはありません

関連するコンテンツ