Amazon Simple Storage Service (Amazon S3) バケットに大容量ファイルをアップロードしたいと考えています。アップロードリクエストには、AWS Key Management Service (AWS KMS) キーを含む暗号化情報を含めています。しかし、アクセス拒否エラーが表示されます。
簡単な説明
オブジェクトの暗号化に使用する AWS KMS キーで kms:Decrypt アクションを実行する権限があることを確認します。
大容量ファイルの場合、AWS コマンドラインインターフェイス (AWS CLI) での高レベルの S3 コマンド、AWS SDK、および多くのサードパーティ製プログラムでは、自動的にマルチパートアップロードが実行されます。AWS KMS キーを使用してマルチパートアップロードを暗号化するには、kms:GenerateDataKey と kms:Decrypt の権限が必要です。kms:GenerateDataKey 権限を使用することで、アップロードを開始できます。kms:Decrypt 権限を使用することで、同じオブジェクトの以前のパートに使用したキーを使用して、新しくアップロードされるパートを暗号化できます。
注: すべてのパートをアップロードしたら、アップロードしたパートを組み立ててマルチパートアップロード操作を完了する必要があります。アップロードされたパートは AWS KMS キーを使用してサーバー側で暗号化されるため、組み立てる前にオブジェクトの各パートを復号する必要があります。そのため、AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) を使用するマルチパートアップロードリクエストには kms:Decrypt 権限が必要です。
解決策
AWS Identity and Access Management (IAM) のロールとキーは、同じ AWS アカウントにある場合もあれば、異なるアカウントにある場合もあります。IAM のロールとキーが同じアカウントにある場合は、IAM ポリシーまたは AWS KMS キーポリシーから kms:Decrypt 権限を指定できます。IAM のロールとキーが異なるアカウントにある場合は、キーと IAM ポリシーの両方で kms:Decrypt 権限を指定する必要があります。
キーポリシー
AWS マネジメントコンソールのポリシービューで AWS KMS キーポリシーを確認してください。
キーポリシーで、IAM のユーザーまたはロールの 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 ポリシージェネレーター