AWS Identity and Access Management(IAM) ユーザーは、Amazon Simple Storage Service (Amazon S3) バケットの s3:PutObject アクションへのアクセス許可を持っています。ただし、オブジェクトをアップロードしようとすると、HTTP 403: アクセスが拒否されましたというエラーメッセージが表示されます。どうすればこれを修正できますか?

IAM ユーザーがバケットにアップロードするための適切なアクセス許可に持っている場合は、アップロードを阻む可能性がある以下のポリシー設定を確認します。

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

IAM ユーザーの s3:PutObjectAcl へのアクセス許可

IAM がアップロード中にオブジェクトの Access Control List (ACL) を更新する必要がある場合、ユーザーには IAM ポリシーの s3:PutObjectAcl アクションへのアクセス許可も必要となります。ユーザーの IAM ポリシーを更新する手順については、IAM ユーザーのアクセス許可の変更を参照してください。

バケットポリシーの条件

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

重要: 条件を確認する際には、必ず条件が許可ステートメント (「Effect」:「Allow」) または拒否ステートメント (「Effect」:「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 my_bucket --key examplefile.jpg --body c:\examplefile.jpg --storage-class STANDARD_IA

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

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

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

aws s3api put-object --bucket my_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 my_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 my_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 my_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 エンドポイントポリシーでは other_bucket にのみアクセスを許可しています。バケットが許可されたリソースとして記載されていない場合、ユーザーは VPC のインスタンスを使用してバケットにアップロードすることはできません。

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

このページは役に立ちましたか? はい | いいえ

AWS サポートナリッジセンターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください

公開日: 2019 年 03 月 01 日