AWS KMS キーを使用した暗号化で、大容量ファイルを Amazon S3 にアップロードしようとしています。アップロードに失敗する理由は何ですか?

最終更新日: 2020 年 6 月 18 日

大容量ファイルを 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:Decrypt アクセス許可が必要です。これにより、新しくアップロードされたパートは、同じオブジェクトの以前のパートに使用されたのと同じキーで暗号化できます。 

解決方法

AWS Identity and Access Management (IAM) ユーザーまたはロールが AWS KMS キーと同じ AWS アカウントにある場合は、キーポリシーで kms:Decrypt を実行するアクセス許可が必要です。IAM ユーザーまたはロールがキーとは異なるアカウントに属している場合は、キーポリシーと IAM アクセス許可の両方に対して、kms:Decrypt へのアクセス許可が必要です。

キー ポリシー

AWS マネジメントコンソールのポリシー ビューを使用して AWS KMS キーポリシーを確認します。

キーポリシーで、IAM ユーザーまたは IAM ロールの Amazon リソースネーム (ARN) が AWS プリンシパルとしてリストされているステートメントを検索します。ARN の形式は arn:aws:iam::111122223333:user/john です。

次に、IAM ユーザーまたは IAM ロールに関連付けられたステートメントによって許可されているアクションのリストをチェックします。許可されている操作の一覧には、マルチパートアップロードを機能させる 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 操作を実行できるようにするポリシーが適用されていることを確認します。

例えば、このステートメントは IAM ユーザーがキーの kms:Decryptkms:GenerateDataKey を実行するアクセス権を付与します (arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd)。

{
  "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 ユーザーのアクセス許可を更新する手順については、IAM ユーザーアクセス許可の変更を参照してください。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合