暗号化キーを更新した後、別の KMS アカウントから AWS Secrets Manager のシークレットにアクセスできず、エラーメッセージが表示されます。このエラーはどのように解決すればよいですか?

最終更新日: 2021 年 1 月 8 日

AWS Secrets Manager のシークレットを取得またはアクセスしようとしましたが、次のようなエラーが表示されました。

「KMS へのアクセスは許可されていません」、 「InternalFailure」、または「不明なエラーが発生しました」。

- または -

「KMS へのアクセスは許可されていません。このバージョンのシークレットは、現在の KMS キーでは暗号化されません。」

簡単な説明

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

注: Secrets Manager コンソールを使用してシークレットに関連付けられた暗号化キーを変更すると、シークレットの新しいバージョンが作成され、新しい暗号化キーで暗号化されます。詳細については、シークレットの暗号化と復号化をご参照ください。

解決方法

新しい KMS CMK キーでシークレットを再暗号化するには、次の手順に従います。

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

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

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

2.    [Secret name] で、シークレットを選択します。

3.    [Secret value] (シークレット値) で、[Retrieve secret value] (シークレット値を取得)、[Edit] (編集) と選択してから、[Save] (保存) を選択します。

「シークレット値は正常に編集されました。」というメッセージが表示されます。

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 コマンドを実行して、以下のような暗号化キーを再暗号化します。

$ 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 cross-account-user --region us-east-1 --query SecretString --output text

    {"CrossAccount":"DefaultEncryption"}