Проверка владельца объекта. Вероятно, объект принадлежит другой учетной записи. Это является причиной для S3 403 во многих ситуациях, когда объекты не могут быть доступны с помощью роли или учетной записи с полными разрешениями. Типичным показателем является то, что вы можете list
объект (ы), но не можете get
или head
их.
В следующем примере я пытаюсь получить доступ к журналу аудита Redshift из 2-й учетной записи. Учетная запись 012345600000
получает доступ к корзине, принадлежащей 999999999999
, используя следующую политику:
{"Version": "2012-10-17",
"Statement": [
{"Action": [
"s3:Get*",
"s3:ListBucket*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-audit-logs",
"arn:aws:s3:::my-audit-logs/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::012345600000:root"
]}}]
}
Теперь я пытаюсь перечислить (s3 ls
), а затем скопировать (s3 cp
) один объект журнала:
aws --profile 012345600000 s3 ls s3://my-audit-logs/AWSLogs/999999999999/redshift/us-west-2/2019/05/25/
# 2019-05-28 14:49:46 376 …connectionlog_2019-05-25T19:03.gz
aws --profile 012345600000 s3 cp s3://my-audit-logs/AWSLogs/999999999999/redshift/us-west-2/2019/05/25/…connectionlog_2019-05-25T19:03.gz ~/Downloads/…connectionlog_2019-05-25T19:03.gz
# fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden
Затем я проверяю владение объектом по учетной записи, которой принадлежит корзина.
aws --profile 999999999999 s3api get-object-acl --bucket my-audit-logs --key AWSLogs/999999999999/redshift/us-west-2/2019/05/25/…connectionlog_2019-05-25T19:03.gz
# "Owner": {
# "DisplayName": "aws-cm-prod-auditlogs-uswest2", ## Not my account!
# "ID": "b2b456ce30a967fb1877b3c9594773ae0275fee248e3ebdbff43d66907b89144"
# },
Затем я копирую объект в ту же корзину с --acl bucket-owner-full-control
. Это делает меня владельцем нового объекта. Обратите внимание на измененный префикс SharedLogs/
.
aws --profile 999999999999 s3 cp \
s3://my-audit-logs/AWSLogs/999999999999/redshift/us-west-2/2019/05/25/…connectionlog_2019-05-25T19:03.gz \
s3://my-audit-logs/SharedLogs/999999999999/redshift/us-west-2/2019/05/25/…connectionlog_2019-05-25T19:03.gz \
--acl bucket-owner-full-control
Теперь я могу загрузить (или загрузить в Redshift!) Новый объект, к которому открыт общий доступ, из того же сегмента.
aws --profile 012345600000 s3 cp s3://my-audit-logs/SharedLogs/999999999999/redshift/us-west-2/2019/05/25/…connectionlog_2019-05-25T19:03.gz ~/Downloads/…connectionlog_2019-05-25T19:03.gz
# download: …