ユーザーが別の AWS アカウントから Amazon Simple Storage Service (Amazon S3) バケットにアクセスしたときに表示される "Access Denied" エラーを解決したいと考えています。Amazon S3 バケットを AWS Key Management Service (AWS KMS) のカスタマーマネージドキーで暗号化しています。
概要
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
次の理由により、ユーザーに "Access Denied" エラーが表示されます。
上記の問題を解決するには、次のトラブルシューティング手順を実行してください。
解決策
s3:GetBucketPolicy と s3:PutBucketPolicy に対するアクセス許可を確認する
次の手順を実行します。
- IAM コンソールを開きます。
- ナビゲーションペインで、バケットポリシーへのアクセスに使用する [ユーザー] や [ロール] などの ID を選択します。
- バケットポリシーへのアクセスに使用する IAM ID 名を選択します。
- IAM ID の [アクセス許可] タブで各ポリシーを展開し、その JSON ポリシードキュメントを表示します。
- JSON ポリシードキュメントで、Amazon S3 アクセスに関連するポリシーを検索してください。次に、バケットに対する s3:GetBucketPolicy アクションと s3:PutBucketPolicy アクションに対するアクセス許可があることを確認します。<br id=hardline_break/>
注: s3:GetBucketPolicy と s3:PutBucketPolicy アクションを含むポリシーがない場合は、これらのアクセス許可をポリシーに追加します。IAM アクセス許可を更新する手順については、「IAM ユーザーのアクセス許可を変更する」を参照してください。<br id=hardline_break/>
次の IAM ポリシーの例では、IAM ID が DOC-EXAMPLE-BUCKET に対して s3:GetBucketPolicy アクションと s3:PutBucketPolicy アクションの実行を許可しています。
{ "Version": "2012-10-17",
"Statement": [
{
"Sid": "ModifyBucketPolicy",
"Action": [
"s3:GetBucketPolicy",
"s3:PutBucketPolicy"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
},
{
"Sid": "AccessS3Console",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
}
]
}
注: 前述の IAM ポリシーの AccessS3console ステートメントは、Amazon S3 にコンソールへのアクセスを許可しています。バケットポリシーの変更に固有のものではありません。
- JSON ポリシードキュメントから、以下を含むステートメントを検索します。"Effect": "Deny"。次に、これらのステートメントが s3:GetBucketPolicy または s3:PutBucketPolicy への IAM ID アクセスを拒否していないことを確認します。
- ポリシーの [リソース] セクションには、バケットの Amazon リソースネーム (ARN) を必ず含めてください。前の例では、ARN は aws:s3:::DOC-EXAMPLE-BUCKET です。<br id=hardline_break/>
** 注: **これは、s3:GetBucketPolicy と s3:PutBucketPolicy がバケットレベルのアクションであるためです。
- s3:GetBucketPolicy と s3:PutBucketPolicy アクションを制限する aws:SourceIP などのグローバル条件を IAM ポリシーに適用していないかどうかを確認します。条件によってアクセスが制限される場合は、それらの条件を削除または更新してください。
バケットポリシーが存在しない場合は追加する
s3:GetBucketPolicy または s3:PutBucketPolicy のアクセス許可を付与するポリシーが見つからない場合は、IAM ID にそれらのアクセス許可を付与するポリシーを追加します。s3:GetBucketPolicy または s3:PutBucketPolicy へのアクセスを拒否するポリシーが見つかった場合は、それらのポリシーを削除します。
バケットへのアクセス許可を持つ別の IAM ID を使用してバケットポリシーを変更する
次の手順を実行します。
- Amazon S3 コンソールを開きます。
- 左側のナビゲーションペインで、[汎用バケット] または [ディレクトリバケット] を選択します。
- バケットのリストから、変更するバケットポリシーを含むバケットを開きます。
- [アクセス許可] タブを選択します。
- [バケットポリシー] を選択します。
- 以下のステートメントを検索します。"Effect": "Deny"。
- 次のステートメントを更新するようにバケットポリシーを編集します: "Effect": "Deny" ステートメント (IAM ID による s3:GetBucketPolicy または s3:PutBucketPolicy へのアクセスを拒否するすべての同ステートメント)。
- バケットポリシーに、IAM エンティティに対する s3:GetBucketPolicy アクションと s3:PutBucketPolicy アクションを制限する aws:PrincipalArn などの条件が含まれているかどうかを確認します。条件によってアクセスが制限される場合は、それらの条件を削除または更新してください。
すべてのアクセスを拒否するバケットポリシーを削除して再作成する
s3:GetBucketPolicy、s3:PutBucketPolicy、またはすべての Amazon S3 アクション (s3:*) にどのユーザーもアクセスできない場合は、delete-bucket-policy AWS CLI コマンドを使用してポリシーを削除します。
delete-bucket-policy
-bucket example_bucket
注: example_bucket は、実際のバケットの名前に置き換えます。
誤ってバケットからロックアウトされてバケットポリシーを削除できない場合は、バケットへのアクセスを回復してください。バケットポリシーを削除したら、新しいポリシーを作成できます。
Amazon S3 パブリックアクセスブロックを無効にする
バケットポリシーでパブリックアクセスが許可されている場合は、バケットの Amazon S3 パブリックアクセスブロックを無効にします。詳細については、「Amazon S3 ストレージへのパブリックアクセスのブロック」と「『パブリック』の意味」を参照してください。
注: プライベートバケットへのパブリックアクセスを防ぐには、AWS アカウントレベルで非アクティブにする前に、バケットの Amazon S3 パブリックアクセスブロックを有効にしてください。
AWS Organizations の場合は、Amazon S3 へのアクセスを許可しない SCP を削除してください
AWS Organizations を使用している場合は、サービス (SCP) を確認してください。s3:PutBucketPolicy アクションまたはその他の Amazon S3 ポリシーアクションを明示的に拒否するステートメントを検索してください。組織がポリシーを必要としない場合は、s3:* アクションに拒否効果を適用する SCP を削除します。
次のポリシー例では、すべての Amazon S3 アクションへのアクセスを拒否します。
{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3:*",
"Resource": "*"
}
]
}