AWS KMS キーを使用した暗号化で、大容量ファイルを Amazon S3 にアップロードしようとしています。アップロードが失敗するのはなぜですか?
最終更新日: 2021 年 4 月 5 日
大容量ファイルを Amazon Simple Storage Service (Amazon S3) バケットにアップロードしようとしています。アップロードのリクエストは、AWS Key Management Service (AWS KMS) キーを使用した暗号化情報を含めています。しかし、「Access Denied (アクセス拒否)」エラーが発生します。一方で、暗号化情報を含む小さいファイルをアップロードすると、アップロードは成功します。どうすれば解決できますか?
簡単な説明
オブジェクトの暗号化に使用している AWS KMS キーで kms:Decrypt アクションを実行するためのアクセス権限があることを確認します。
ファイルが大きい場合、AWS CLI (aws s3 コマンド)、AWS SDK、および多くのサードパーティープログラムがマルチパートアップロードを自動で実行します。AWS KMS キーでの暗号化を使用してマルチパートアップロードを実行するには、リクエスタに kms:GenerateDataKey および kms:Decrypt アクセス権限が必要です。kms:GenerateDataKey アクセス権限により、リクエスタはアップロードを開始できます。kms:Decrypt アクセス権限を使用すると、新しくアップロードされたパートを、同じオブジェクトの以前のパートで使用したのと同じキーで暗号化できます。
注: すべてのパートが正常にアップロードされたら、アップロードされたパートをアセンブルしてマルチパートアップロード操作を完了する必要があります。アップロードされたパーツは KMS キーを使用してサーバー側で暗号化されるため、オブジェクトパーツをアセンブルする前に復号する必要があります。このため、リクエスタは KMS CMKs (SSE-KMS) によるサーバー側の暗号化を使用したマルチパートアップロードのリクエストのための kms:Decrypt アクセス権限を持っている必要があります 。
解決方法
AWS Identity and Access Management (IAM) ロールとキーが同じアカウントにある場合は、キーポリシーで kms:Decrypt アクセス権限を指定する必要があります。IAM ロールがキーとは異なるアカウントに属している場合は、キーと IAM ポリシーの両方で kms:Decrypt アクセス権限を指定する必要があります。
キーポリシー
AWS マネジメントコンソールのポリシービューを使用して AWS KMS キーポリシーを確認します。
キーポリシーで、IAM ユーザーまたは IAM ロールの Amazon リソースネーム (ARN) が AWS プリンシパルとしてリストされているステートメントを検索します。ARN の形式は arn:aws:iam::111122223333:user/john です。
その後、IAM ユーザーまたは IAM ロールに関連付けられたステートメントによって許可されているアクションのリストをチェックします。許可されている操作の一覧には、SSE-KMS を使用して、マルチパートアップロードを機能させる kms:Decrypt が含まれている必要があります。
例えば、このキーポリシーのステートメントでは、ユーザー John に対して kms:Decrypt および kms:GenerateDataKey アクションの実行を許可します。
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/john"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*"
},
IAM アクセス許可
IAM のアクセス権限を確認するには、IAM コンソールを開き、次に IAM ユーザーまたはロールを開きます。
IAM ユーザーまたはロールに適用されているアクセス権限ポリシーの一覧を確認します。オブジェクトの暗号化に使用しているキーに対して、kms:Decrypt 操作を実行できるようにするポリシーが適用されていることを確認します。
例:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
]
}
}
このサンプルステートメントは、IAM ユーザーがキーの kms:Decrypt と kms:GenerateDataKey を実行するアクセス権を付与します (arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd)。
IAM ユーザーのアクセス権限を更新する手順については、IAM ユーザーアクセス権限の変更をご参照ください。