Проблема здесь в том, что другая учетная запись (AWS Billing) создает ваши отчеты о выставлении счетов в вашей корзине для выставления счетов, и это ведет вас в темный мир списков ACL для объектов S3 - см. https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html
Если вы обращались к корзине S3 из своей платежной учетной записи, у вас не возникнет проблем, поскольку платежная учетная запись является владельцем корзины и ей всегда предоставляется доступ, однако для других учетных записей единственным способом предоставления доступа является либо Writer (AWS Billing) для установки соответствующих списков ACL при копировании (этого не произойдет) или для ретроспективного изменения ACL.
Вот список ACL объекта по умолчанию, который создается для отчета о выставлении счетов:
$ aws s3api get-object-acl --bucket my-billing-bucket --key reports/xxx/xxx.json
{
"Owner": {
"DisplayName": "aws-billpresentation+artifact-storage",
"ID": "aaaaaaaaaa"
},
"Grants": [
{
"Grantee": {
"DisplayName": "aws-billpresentation+artifact-storage",
"ID": "aaaaaaaaaa",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "mybilling",
"ID": "xxxxxxxxxxx",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}
]
}
В приведенном выше примере aws-billpresentation + artifact-storage - это имя платежной учетной записи AWS, которая записывает ваши отчеты, тогда как mybiling - это имя платежной учетной записи, в которой находится ваша корзина.
Если вы хотите предоставить доступ на чтение другой учетной записи, вам нужно будет найти канонический идентификатор этой учетной записи, а затем добавить грант READ, повторяя это для каждого файла. Например:
aws s3api put-object-acl --bucket my-billing-bucket --key reports/xxx/xxx.json --access-control-policy '{
"Owner": {
"DisplayName": "aws-billpresentation+artifact-storage",
"ID": "aaaaaaaa"
},
"Grants": [
{
"Grantee": {
"DisplayName": "aws-billpresentation+artifact-storage",
"ID": "aaaaaaaa",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "mybilling",
"ID": "xxxxxxxx",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "myotheraccount",
"ID": "yyyyyyyy",
"Type": "CanonicalUser"
},
"Permission": "READ"
}
]
}'
Самый простой вариант - публиковать отчеты в той учетной записи, где вы хотите фактически обрабатывать отчеты, что позволяет избежать всех проблем ACL объекта S3.