s3 및 역할이 계정에서 어떻게 작동하는지에 관한 질문이 있습니다.역할을 가정하여 람다를 시도 할 때 다른 계정에서 s3 버킷에 액세스하려고했습니다. GetObject 작업을 얻습니다. 액세스가 거부되었습니다.
계정 A의 역할을 가진 람다 함수와 람다 함수가 액세스해야하는 계정 B의 버킷이있는 상황이 있습니다. 계정 A의 역할에는 계정 B의 버킷에 대한 s3 : * 권한이 있습니다. 계정 A의 역할을 수락하기 위해 계정 B의 버킷에 주체를 설정합니다. 버킷 정책은 또한 버킷에서 s3 : *를 허용합니다. 아래처럼.
A 계정 역할 :
{
"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의 버킷에 대한 LIST 또는 GET 작업에 문제가 없었습니다. 따라서 해결 방법이 있지만 우리는 원래 설정이 작동하도록 할 수 있습니다.
이것은 내가받는 오류 메시지입니다.
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
올바른 일을하고있는 것 같습니다. 액세스에서 DENY를 유발할 수있는 정책 (두 계정 중 어느 하나)이 있습니까? 따라서 ALLOW를 무시합니다. 작동중인 LIST 코드와 작동하지 않는 GET 코드를 보여줄 수 있습니까? 수신중인 정확한 오류 메시지도 포함시킬 수 있습니까? (질문을 수정하여 세부 정보를 추가 할 수 있습니다.) –