暗号化キーを更新した後、別の KMS アカウントから AWS Secrets Manager のシークレットにアクセスできず、エラーメッセージが表示されます。これを解決する方法を教えてください。

最終更新日: 2019 年 7 月 2 日

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

「Access to KMS is not allowed」、 「InternalFailure」、 「An unknown error occurred」。 

簡単な説明

Secrets Manager のシークレットに関連付けられている暗号化キーを変更しても、以前のバージョンのシークレットが新しい暗号化キーで再暗号化されることはありません。つまり「クロスアカウント」とも呼ばれる外部アカウントは更新した暗号化キーの値を持たないため、キーにアクセスできません。シークレットの値を取得するには、変更した AWS Key Management Service (AWS KMS) キーを使用してシークレットを再暗号化する必要があります。詳細については、シークレットの暗号化と復号化を参照してください。

解決方法

以下の手順に従って、暗号化キーを再暗号化します。

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

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

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

3.    [Secret value] で、[Retrieve secret value]、[Edit] と選択してから、[Save] を選択します。

「Your secret value has been successfully edited.」というメッセージが表示されます。

AWS コマンドラインインターフェイス (AWS CLI)

1.    creds.json という名前の JSON ファイルを作成します。この例では、{"CrossAccount":"DefaultEncryption"} がシークレット値です。

$ cat creds.json 
{"CrossAccount":"DefaultEncryption"}

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

$ aws secretsmanager update-secret --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --secret-string file://creds.json
    {
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:cross-account",
    "Name": "cross-account",
    "VersionId": "f68246e8-1cfb-4c3b-952b-17c9298d3462"
    }

3.    以下のような 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"}