AWS CLI を使用すると Amazon S3 にアクセスできますが、AWS SDK を使用するとアクセス拒否エラーが発生します。なぜですか?

最終更新日: 2021 年 1 月 27 日

AWS コマンドラインインターフェイス (AWS CLI) を使用すると、Amazon Simple Storage Service (Amazon S3) リソースにアクセスできます。しかし、AWS SDK を使用すると、アクセス拒否エラーが発生します。どうすれば解決できますか?

簡単な説明

AWS CLI を使用して AWS SDK を使用せずに Amazon S3 にアクセスできる場合は、次のトラブルシューティング手順に従ってください。

1.    使用している AWS CLI と AWS SDK に同じ認証情報が設定されていることを確認してください。

2.    AWS SDK の Amazon S3 へのリクエストが、ファイアウォール、HTTP プロキシ、または Amazon Virtual Private Cloud (Amazon VPC) エンドポイントによって許可されているかどうかを確認してください。

解決方法

使用している AWS CLI と AWS SDK に同じ認証情報が設定されていることを確認してください

AWS CLI で設定されている認証情報を取得するには、次のコマンドを実行します。

aws iam list-access-keys

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

AWS CLI に関連付けられた AWS Identity and Access Management (IAM) ロールを使用している場合は、このコマンドを実行してロールを取得します。

aws sts get-caller-identity

使用している AWS SDK で設定されている認証情報を取得するには、AWS Security Token Service (AWS STS) クライアントを使用して GetCallerIdentity 呼び出しを実行します。例えば、AWS SDK for Python (Boto3) を使用している場合は、get_caller_identity を実行します。

AWS CLI と AWS SDK が異なる認証情報を使用している場合は、AWS CLI に保存されている認証情報で AWS SDK を使用してみてください。

AWS CLI または SDK の Amazon S3 へのリクエストが、ファイアウォール、HTTP プロキシ、または Amazon VPC エンドポイントによって許可されているかどうかを確認する

設定された認証情報が同じ場合は、S3 への CLI または SDK リクエストも同じソースから送信されているかどうかを確認します。例えば、リクエストが同じ Amazon Elastic Compute Cloud (Amazon EC2) インスタンスからのものであるかどうかを確認します。

リクエストが同じ認証情報を持っており、同じソースからの者である場合は、SDK が意図された認証情報を使用していることを確認してください。例えば、AWS SDK for Python (Boto3) を使用している場合、SDK では、複数の方法を使用して認証情報を設定できます。その結果、Boto3 は、複数の場所において、特定の順序で認証情報を検索します。

注: Boto3 は特定の順序で認証情報を検索するため、以前に間違った認証情報を指定した場合、その誤った認証情報が使用されます。したがって、Boto3 が最初に確認する場所で正しい認証情報を指定してください。Boto3 が認証情報を検索する順序の詳細については、Boto3 SDK ウェブサイトの「Credentials」をご参照ください。

正しい認証情報とアクセス許可が使用されていることを確認しても、「アクセス拒否」エラーが表示される場合は、エラーのトラブルシューティングを行います。エラーのさまざまな根本原因のトラブルシューティング方法の詳細については、「Amazon S3 からの 403 Access Denied エラーをトラブルシューティングするにはどうすればよいですか?」をご参照ください。

リクエストが異なるソースから送信される場合は、SDK を使用するソースがファイアウォール、HTTP プロキシ、または VPC エンドポイント経由でリクエストを送信しているかどうかを確認します。その後、ファイアウォール、HTTP プロキシ、または VPC エンドポイントで、Amazon S3 に送信しようとしているリクエストが許可されていることを確認してください。

例えば、次の VPC エンドポイントポリシーでは、DOC-EXAMPLE-BUCKET のダウンロードおよびアップロードのアクセスを許可しています。この VPC エンドポイントを使用している場合は、他のバケットへのアクセスが拒否されます。

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

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


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