Amazon Simple Storage Service (Amazon S3) バケットのバケットポリシーを変更しようとすると、次のエラーが表示されます: You don't have permissions to edit bucket policy
簡潔な説明
このエラーは、次の理由により発生します。
これらの問題を解決するには、以下の手順を行います。
- IAM ユーザーまたはロールに、バケットポリシーを表示するための s3:Get:BucketPolicy アクセス許可と、バケットポリシーを編集するためのs3:PutBucketPolicyアクセス許可を付与します。アクセス許可を付与するための IAM ユーザーポリシーが存在しなければ、それを追加します。
- アクセス許可が拒否された場合は、バケットアクセス許可を持つ別の IAM ID を使用して、バケットポリシーを編集します。または、誰もアクセスできないバケットポリシーは削除して再作成します。
- パブリック読み取りポリシーを追加しようとしている場合は、バケットの S3 パブリックアクセスブロック機能を無効にします。
- AWS Organizations を使用する場合は、S3 アクションを明示的に拒否するサービスコントロールポリシーがないことを確認します。また、操作に例外を追加できることを確認してください。
解決方法
s3:GetBucketPolicy と s3:PutBucketPolicyS3: に対するアクセス許可を確認
以下の手順を実行してください。
-
IAM コンソールを開きます。
-
バケットポリシーへのアクセスに使用する ID を、[ユーザー] や [ロール] などで選択します。
-
バケットポリシーへのアクセスに使用する IAM ID 名を選択します。
-
IAM ID の [許可] タブで各ポリシーを展開し、その JSON ポリシードキュメントを表示します。
-
JSON ポリシードキュメント内から、Amazon S3 へのアクセスに関連するポリシーを検索します。次に、バケットに対する ** s3:GetBucketPolicy** アクションと s3:PutBucketPolicyアクションに対するアクセス許可があることを確認します。
次の 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 アクセスを拒否していないことを確認します。
-
バケットの ARN (例: arn:aws:s3:::DOC-EXAMPLE-BUCKET) がポリシーの Resource セクションにあることを確認します。これは、s3:GetBucketPolicy と s3:PutBucketPolicy がバケットレベルのアクションであるためです。
-
s3:GetBucketPolicy と s3:PutBucketPolicy アクションを制限する AWS:SourceIp などのグローバル条件が IAM ポリシーに適用されていないかどうかを確認します。条件によってアクセスが制限される場合は、それらの条件を削除または更新してください。
**バケットポリシーが存在しない場合は追加 **
s3: GetBucketPolicy または s3:PutBucketPolicy のアクセス許可を付与するポリシーが見つからない場合は、IAM ID にそれらのアクセス許可を付与するポリシーを追加します。s3:GetBucketPolicy または s3:PutBucketPolicy へのアクセスを拒否するポリシーが見つかった場合は、それらのポリシーを削除します。IAM 権限を変更する手順については、「Changing permissions for an IAM user」を参照してください。
バケットへのアクセス許可を持つ別の 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:\ *) へのアクセスをどのユーザーに対しても拒否しているバケットポリシーは、削除します。バケットポリシーを削除できない場合は、AWS アカウントのルートユーザーとしてポリシーを削除してみてください。ポリシーが削除されたら、新しいバケットポリシーを作成できます。
S3 パブリックアクセスブロックを無効化
バケットポリシーでパブリックアクセスが許可されている場合は、そのバケットで S3 パブリックアクセスブロックが有効になっているかどうかを確認し、有効なら無効にします。パブリックにした S3 バケットへのアクセスが今後拒否されるのを防ぐため、そのアカウントで S3 パブリックアクセスブロックが有効になっていないことを確認します。
詳細については、「Blocking public access to your Amazon S3 storage」を参照してください。また、「The meaning of "public"」も参照してください。
注: S3 パブリックアクセスブロックを、アカウントレベルで無効にする前に、プライベートバケットのバケットレベルで有効になっていることを確認してください。これは、これらのプライベートバケットへの不要なパブリックアクセスを防ぐために必要です。
AWS Organizations の場合は、Amazon S3 へのアクセスを許可しないサービスコントロールポリシーを削除
AWS Organizations を使用している場合は、サービスコントロールポリシーをチェックして、s3:PutBucketPolicy アクションやその他の S3 アクションを明示的に拒否するステートメントがないか確認してください。組織のセキュリティポリシーに従って S3 アクションを明示的に拒否するサービスコントロールポリシーを削除します。
例えば、次のポリシーはすべての S3 アクションへのアクセスを拒否します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3:*",
"Resource": "*"
}
]
}