私の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスは AWS Key Management Service (AWS KMS) 暗号化を使用しています。EC2 インスタンスの Amazon Elastic Block Store (Amazon EBS) ボリュームのスナップショットを作成したいのですが、エラーが表示されます。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
前提条件:
Amazon EBS ボリュームの暗号化されたスナップショットを作成しようとしたときに表示されるエラーメッセージに基づいて、次の操作を実行します。
"AccessDenied: User is not authorized to perform: kmsCreateGrant" というエラーのトラブルシューティング
スナップショットを作成した AWS Identity and Access Management (IAM) エンティティに必要な権限がない場合、"AccessDenied" エラーメッセージが表示されます。暗号化されたスナップショットを共有する場合、スナップショットの暗号化に使用したカスタマーマネージドキーも共有する必要があります。
AWS アカウント間でキーを共有するには、キーを作成するときに [別のアカウントを追加] を選択します。または、AWS KMS キーポリシーを更新して、送信先アカウントが AWS KMS キーを使用できるようにします。
AWS KMS キーポリシーの例:
{
"Sid": "Allow use of the key for EBS snapshot operations",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT-ID:role/ROLE-NAME"
},
"Action": [
"kms:DescribeKey",
"kms:CreateGrant",
"kms:GenerateDataKey",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:ReEncrypt",
"kms:Decrypt"
],
"Resource": "*"
}
注: ACCOUNT-ID は送信先アカウント ID に、ROLE-NAME は IAM ロール名に置き換えてください。
詳細については、「AWS KMS アクセス許可のトラブルシューティング」を参照してください。
"No resource-based policies allow access" というエラーのトラブルシューティング
このエラーは、クロスアカウントアクセスを誤って設定した場合、または送信先アカウントがアクセスをブロックした場合に発生します。
この問題をトラブルシューティングするには、AWS KMS キーポリシーで、送信先アカウントが必要なアクセス許可を持つキーにアクセスできることを確認します。
AWS KMS キーポリシーの例:
{
"Sid": "Allow use of the key for EBS snapshot operations",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT-ID:role/ROLE-NAME"
},
"Action": [
"kms:DescribeKey",
"kms:CreateGrant",
"kms:GenerateDataKey",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:ReEncrypt",
"kms:Decrypt"
],
"Resource": "*"
}
注: ACCOUNT-ID は送信先アカウント ID に、ROLE-NAME は IAM ロール名に置き換えてください。
次に、暗号化されたスナップショットと AWS KMS キーを送信先アカウントと共有します。
AWS Organizations の送信先アカウントのサービスコントロールポリシー (SCP) がアクセスをブロックしていないことを確認してください。AWS は IAM またはリソースベースのポリシーの前に SCP を評価します。
クロスリージョン構成の場合は、次の describe-key AWS CLI コマンドを実行して、ユーザーが送信先リージョンの AWS KMS にアクセスできることを確認します。
aws kms describe-key --key-id example-key-id --region example-region
注: example-key-id は AWS KMS キー ID に、example-region は送信先リージョンに置き換えてください。
ユーザーが送信先リージョンのキーにアクセスできない場合は、マルチリージョンレプリカキーを作成したことを確認してください。
詳細については、「他のアカウントのユーザーに AWS KMS キーの使用を許可する」を参照してください。
"Resource does not exist in this Region" というエラーのトラブルシューティング
この問題をトラブルシューティングするには、必要な AWS リージョンの暗号化キーへのアクセスを正しく設定していることを確認してください。
AWS KMS キーが送信先リージョンに存在することを確認するには、次の list-keys コマンドを実行します。
aws kms list-keys --region example-region
注: example-region は送信先リージョンに置き換えてください。
キーが送信先リージョンに存在しない場合は、AWS KMS キーポリシーを更新して、送信先リージョンのアカウントへのアクセス権を付与します。
AWS KMS キーポリシーの例:
{
"Sid": "Allow use of the key for EBS snapshot operations",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT-ID:role/ROLE-NAME"
},
"Action": [
"kms:DescribeKey",
"kms:CreateGrant",
"kms:GenerateDataKey",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:ReEncrypt",
"kms:Decrypt"
],
"Resource": "*"
}
注: ACCOUNT-ID は送信先アカウント ID に、ROLE-NAME は IAM ロール名に置き換えてください。
クロスリージョン構成の場合は、マルチリージョンレプリカキーを作成したことを確認してください。
AWS KMS キーに必要なアクセス許可があるかどうかを確認するには、次の get-key-policy コマンドを実行します。
aws kms get-key-policy --key-id example-key-id --policy-name default --region example-region
注: example-key-id は AWS KMS キー ID に、example-region は送信先リージョンに置き換えてください。
AWS KMS キーポリシーに必要なアクセス許可が含まれていない場合は、AWS KMS キーポリシーを更新してください。