Amazon S3 バケットにオブジェクトを追加する権限を持つユーザーに、アクセス拒否エラーが発生します。なぜですか?

最終更新日: 2020 年 11 月 4 日

AWS Identity and Access Management (IAM) ユーザーが、私の Amazon Simple Storage Service (Amazon S3) バケットの s3:PutObject アクションに対するアクセス許可を持っています。しかし、オブジェクトをアップロードしようとすると、HTTP 403: Access Denied エラーが発生します。どうすれば解決できますか?

簡単な説明

IAM ユーザーがバケットにアップロードするための適切なアクセス許可を持っている場合は、アップロードを妨げている設定について次のポリシーを確認してください。

  • s3:PutObjectAcl に対する IAM ユーザーのアクセス許可
  • バケットポリシーの条件
  • Amazon Virtual Private Cloud (Amazon VPC) エンドポイントポリシーが許可するアクセス

解決方法

s3:PutObjectAcl に対する IAM ユーザーのアクセス許可

IAM ユーザーがアップロード中にオブジェクトのアクセスコントロールリスト (ACL) を更新する必要がある場合、ユーザーは IAM ポリシーで s3:PutObjectAcl のアクセス許可も持っている必要があります。ユーザーの IAM ポリシーを更新する方法については、IAM ユーザーのアクセス権限の変更をご参照ください。

バケットポリシーの条件

バケットへのアップロードを制限する次の条件の例について、バケットポリシーを確認してください。バケットポリシーに条件があり、その条件が有効な場合、IAM ユーザーはアップロードが機能するための条件を満たす必要があります。

重要: 条件を確認するときは、条件が Allow ステートメント ("Effect": "Allow")、または Deny ステートメント ("Effect": "Deny") に関連付けられていることを確認してください。アップロードを機能させるには、Allow ステートメントの条件に従うか、Deny ステートメントの条件を回避する必要があります。

次のように、特定の IP アドレスからのみアップロードを許可する条件を確認します。

"Condition": {
  "IpAddress": {
    "aws:SourceIp": "54.240.143.0/24"
  }
}

バケットポリシーにこの条件がある場合、IAM ユーザーは許可された IP アドレスからバケットにアクセスする必要があります。

次のように、オブジェクトが特定のストレージクラスである場合にのみアップロードを許可する条件を確認します。

"Condition": {
  "StringEquals": {
    "s3:x-amz-storage-class": [
      "STANDARD_IA"
    ]
  }

ポリシーにこの条件がある場合、ユーザーは許可されたストレージクラスでオブジェクトをアップロードする必要があります例えば、前の条件ステートメントには STANDARD_IA ストレージクラスが必要です。これは、ユーザーが次のような AWS コマンドラインインターフェイス (AWS CLI) コマンドを使用して、オブジェクトをアップロードする必要があることを意味します。

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key examplefile.jpg --body c:\examplefile.jpg --storage-class STANDARD_IA

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

次のように、オブジェクトに特定のアクセスコントロールリスト (ACL) が割り当てられている場合にのみアップロードを許可する条件を確認します。

"Condition": {
                "StringEquals": {
                    "s3:x-amz-acl":["public-read"]
                }
            }

ポリシーにこの条件がある場合、ユーザーは許可された ACL でオブジェクトをアップロードする必要があります。たとえば、前の条件ではパブリック読み取り ACL が必要なため、ユーザーは次のようなコマンドを使用してオブジェクトをアップロードする必要があります。

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key examplefile.jpg --body c:\examplefile.jpg --acl public-read

次のように、アップロードによってバケット所有者(正規ユーザー ID)にオブジェクトの完全なコントロールを許可する必要がある条件を確認します。

"Condition": {
  "StringEquals": {
    "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
  }
}

ポリシーにこの条件がある場合、ユーザーは次のようなコマンドでオブジェクトをアップロードする必要があります。

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key examplefile.jpg --body c:\examplefile.jpg --acl bucket-owner-full-control

次のように、オブジェクトが AWS Key Management System (AWS KMS) キーによって暗号化されている場合にのみアップロードを許可する条件を確認します。

"Condition": {
  "StringEquals": {
    "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
  }
}

ポリシーにこの条件がある場合、ユーザーは次のようなコマンドでオブジェクトをアップロードする必要があります。

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key examplefile.jpg --body c:\examplefile.jpg --ssekms-key-id arn:aws:kms:us-east-1:111122223333:key/*

次のように、オブジェクトが特定の種類のサーバー側暗号化を使用している場合にのみアップロードを許可する条件を確認します。

"Condition": {
  "StringEquals": {
    "s3:x-amz-server-side-encryption": "AES256"
  }
}

ポリシーにこの条件がある場合、ユーザーは次のようなコマンドでオブジェクトをアップロードする必要があります。

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key examplefile.jpg --body c:\examplefile.jpg --server-side-encryption "AES256"

VPC エンドポイントポリシーで許可されているアクセス

IAM ユーザーが Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用して Amazon S3 にオブジェクトをアップロードしていて、そのインスタンスが VPC エンドポイントを使用して Amazon S3 にルーティングされている場合は、VPC エンドポイントポリシーを確認する必要があります。エンドポイントポリシーでバケットへのアップロードが許可されていることを確認してください。

例えば、次の VPC エンドポイントポリシーは、DOC-EXAMPLE-BUCKET へのアクセスのみを許可しています。バケットが許可されたリソースとしてリストされていない場合、ユーザーは VPC のインスタンスを使用してバケットにアップロードできません。

{
  "Statement": [{
    "Sid": "Access-to-specific-bucket-only",
    "Principal": "*",
    "Action": [
      "s3:PutObject"
    ],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
  }]
}

加えて、ユーザーが ACL を使用してオブジェクトをアップロードする場合、VPC エンドポイントポリシーは、次のように s3:PutObjectAcl アクションへのアクセスも許可する必要があります。

{
  "Statement": [{
    "Sid": "Access-to-specific-bucket-only",
    "Principal": "*",
    "Action": [
      "s3:PutObject",
      "s3:PutObjectAcl",
    ],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
  }]
}

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


請求に関するサポートまたは技術サポートが必要ですか?