Amazon Simple Storage Service (Amazon S3) バケットに大容量ファイルをアップロードしたいと考えています。アップロードリクエストには、AWS Key Management Service (AWS KMS) キーを含む暗号化情報を含めています。しかし、アクセス拒否エラーが表示されます。
簡単な説明
オブジェクトの暗号化に使用する AWS KMS キーで kms:Decrypt アクションを実行する権限があることを確認します。
大容量ファイルの場合、AWS コマンドラインインターフェイス (AWS CLI) での高レベルの aws s3 コマンド、AWS SDK、および多くのサードパーティ製プログラムでは、自動的にマルチパートアップロードが実行されます。AWS KMS キーを使用してマルチパートアップロードを暗号化するには、kms:GenerateDataKey と kms:Decrypt の権限が必要です。kms:GenerateDataKey 権限を使用することで、アップロードを開始できます。kms:Decrypt 権限で、同じオブジェクトの以前のパートに使用したキーを使用して、新しくアップロードされるパートを暗号化できます。
**注:**AWS KMS キーを使用して暗号化してマルチパートアップロードを実行するには、以下が必要です。
- キーに対する kms:Decrypt および kms:GenerateDataKey アクションへの権限。
- CreateMultipartUpload API の kms:GenerateDataKey アクションの権限。
- UploadPart API と UploadPartCopy API に対する kms:Decrypt アクションの権限。Amazon S3 は、マルチパートアップロードが完了する前に、暗号化されたファイルパートからデータを復号して読み取る必要があるため、これらの権限が必要です。
AWS ID およびアクセス管理 (IAM) ユーザーまたはロールが KMS キーと同じ AWS アカウントにある場合は、キーポリシーに対するこれらの権限が必要です。IAM ユーザーまたはロールが KMS キーとは異なるアカウントに属している場合、キーポリシーと IAM ユーザーまたはロールの両方に対する権限が必要です。
解決策
キーポリシー
AWS マネジメントコンソールのポリシービューで AWS KMS キーポリシーを確認してください。
キーポリシーで、IAM のユーザーまたはロールの Amazon Resource Number (ARN) が AWS のプリンシパルとしてリストされているステートメントを検索します。ARN は、arn:aws:iam::111122223333:user/john のような形式です。
次に、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 ユーザーに対して、arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd キーで kms:Decrypt と kms:GenerateDataKey を実行する権限が付与されます。
IAM 権限を更新する手順については、「IAM ユーザーの権限を変更する」を参照してください。
関連情報
AWS ポリシージェネレーター
Amazon S3 でのデータ暗号化