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

最終更新日: 2019 年 3 月 12 日

大容量ファイルを Amazon Simple Storage Service (Amazon S3) バケットにアップロードしようとしています。アップロードのリクエストは、AWS Key Management Service (AWS KMS) キーを使用した暗号化情報を含めています。しかし、「Access Denied (アクセス拒否)」エラーが発生します。一方で、暗号化情報を含む小さいファイルをアップロードすると、アップロードは成功します。どうすれば修正できますか?

簡単な説明

オブジェクトの暗号化に使用している AWS KMS キーで kms:Decrypt アクションを実行する許可があることを確認します。

注意: kms:Decrypt は、AWS KMS キーを使って暗号化された Amazon S3 オブジェクトをアップロードまたはダウンロードするときに許可が必要となるアクションのひとつにすぎません。kms:Encryptkms:ReEncrypt*kms:GenerateDataKey*、および kms:DescribeKey に対する許可も持っている必要があります。

ファイルが大きい場合、AWS CLI (aws s3 コマンド)、AWS SDK、および多くのサードパーティープログラムがマルチパートアップロードを自動で実行します。AWS KMS キーを使用した暗号化でマルチパート アップロードを実行するには、リクエスタはキーに対する kms:Decrypt 操作のアクセス許可を持っている必要があります。Amazon S3 はマルチパート アップロードを完了する前に、暗号化されたファイル パートからデータを復号化して読み込む必要があるため、このアクセス許可が必要です。

解決方法

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 を含むキーに対するいくつかの操作を実行することを許可します。

{
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/john"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },

IAM アクセス許可

IAM のアクセス許可を確認するには、IAM コンソールを開き、次に IAM ユーザーまたはロールを開きます。

IAM ユーザーまたはロールに適用されているアクセス許可ポリシーの一覧を確認します。オブジェクトの暗号化に使用しているキーに対して、kms:Decrypt 操作を実行できるようにするポリシーが適用されていることを確認します。

注: kms:Decrypt は、AWS KMS キーで暗号化された Amazon S3 オブジェクトをアップロードまたはダウンロードするときにアクセス許可を要する操作の 1 つに過ぎません。また、kms:Encryptkms:ReEncrypt*kms:GenerateDataKey*、および kms:DescribeKey に対するアクセス許可も必要です。

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

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt",
      "kms:ReEncrypt*",
      "kms:GenerateDataKey*",
      "kms:DescribeKey"
    ],
    "Resource": [
      "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    ]
  }
}

IAM ユーザーのアクセス許可を更新する手順については、「IAM ユーザーアクセス許可の変更」を参照してください。


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

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


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