s3とロールがアカウント間でどのように機能するかに関する質問があります。私は自分のラムダを想定してみると、別のアカウントのs3バケットにアクセスしようとしました。私はGetObjectオペレーションを取得します:アクセスが拒否されました
私は、アカウントAの役割を持つラムダ機能と、ラムダ機能がアクセスする必要があるアカウントBのバケットを持っている状況があります。アカウントAの役割は、アカウントBのバケットに対するs3:*権限を持っています。アカウントBのバケットにプリンシパルを設定して、アカウントAの役割を受け入れるようにしました。バケットポリシーでは、バケットのs3:*も可能です。以下のようなもの。
アカウント役割:
{
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket/*",
"arn:aws:s3:::bucket"
],
"Effect": "Allow"
}
アカウントBバケツポリシー:
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account:role/role"
},
"Action": "s3:*",
"Resource": ["arn:aws:s3:::bucket/*","arn:aws:s3:::bucket"]
}
我々はに実行されている問題は、アカウントAでの役割はバケット上のすべてのLISTアクションを行うことができることですアカウントBでは、しかし私たちはGETアクションを試みるときにアクセスが拒否されます。両者にs3:*パーミッションがあるので意味がありません。
バケツまたはIAMポリシーの設定で、この機能が期待されるようになってしまったことがありますか?私たちはアカウントAの役割と同じポリシーで、役割Bを考えましたが、アカウントBでは、アカウントBのバケツでLISTまたはGETの動作に問題はありませんでした。回避策はありますが、元のセットアップが動作するようになります。
これは私が得ているエラーメッセージです。ここで
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
あなたは正しいことをしているようです。アクセスの拒否を引き起こす可能性のあるポリシーが(どちらのアカウントでも)存在するため、ALLOWをオーバーライドしていますか?動作しているLISTコードと動作していないGETコードを表示できますか?受け取っている正確なエラーメッセージも含めることができますか? (これらの詳細を追加するには質問を編集できます) –