我无法同步连接到两个单独的AWS账户的两个S3存储桶。
有两个AWS账户-账户A(由第三方管理)和账户B(由我管理)。我希望将文件从帐户A的S3存储桶中提取到帐户B的S3存储桶中。
帐户A向我提供了以下说明:
LogsUser
的新IAM用户。将以下策略附加到用户: {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::ACCOUNTID:role/12345-LogAccess-role"
}
]
}
配置AWS CLI以更新配置和凭证文件。具体来说,~/.aws/config
文件看起来像:
[profile LogsUser]
role_arn = arn:aws:iam::ACCOUNTID:role/12345-LogAccess-role
source_profile = LogsUser
~/.aws/credentials
文件看起来像
aws_access_key_id = YOUR_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
从这里,我可以使用$ aws s3 ls --profile LogsUser s3://bucket-a
成功查询帐户A的存储桶中的日志文件。
我已经在帐户B中设置了bucket-b
,但是无法查询bucket-b
中的任何文件。例如,$ aws s3 ls --profile LogsUser s3://bucket-b
返回An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied
。
是否可以添加其他一些东西到配置文件或IAM策略中,以允许使用bucket-b
选项访问--profile LogsUser
?我可以使用其他bucket-b
设置访问--profile
,但是我不想同步到本地文件系统,然后再同步到另一个存储桶。
所需的结果是运行类似aws s3 sync s3://bucket-a s3://bucket-b --profile UserLogs
的命令。
答案 0 :(得分:0)
我建议您考虑使用AWS S3存储桶复制:
答案 1 :(得分:0)
如果您只想列出Fatal Python error: Py_Initialize: can't initialize sys standard streams
Traceback (most recent call last):
File "$HOME/anaconda3/lib/python3.7/io.py", line 52, in <module>
File "$HOME/anaconda3/lib/python3.7/abc.py", line 147
print(f"Class: {cls.__module__}.{cls.__qualname__}", file=file)
^
SyntaxError: invalid syntax
Aborted (core dumped)
中的对象,请执行此操作。
首先请确保LogsUser IAM用户具有访问帐户B中的bucket-b
s3存储桶的适当权限。如果没有,您可以将此策略添加到该用户
bucket-b
如果用户具有权限,并且存储在{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket-b/*"
]
}
]
}
中存储在~/.aws/credentials
中的访问密钥和秘密密钥属于LogsUser IAM用户,则只需列出{{1}内的对象使用以下命令。
[default]
如果要运行命令bucket-b
,请执行此操作。
请记住,在担任具有LogsUser永久凭证的角色后,我们将使用STS创建的临时凭证。这意味着帐户A中的角色应该有权访问两个存储桶以执行操作,而另一个帐户(帐户B)中的存储桶(aws s3 ls
)应该具有适当的存储桶策略以允许角色执行S3操作。 / p>
要向角色提供访问aws s3 sync s3://bucket-a s3://bucket-b --profile UserLogs
的权限,请将以下存储桶策略附加到bucket-b
。
bucket-b
还在帐户A中,将一个策略附加到以下角色,以允许访问两个帐户中的S3存储桶。
bucket-b
答案 2 :(得分:0)
您的情况是:
Bucket-A
中的Account-A
复制Bucket-B
中的Account-B
Account-A
为您提供了在LogAccess-role
中假设Account-A
的能力,该权限可以访问Bucket-A
使用CopyObject()
命令(AWS CLI sync
命令使用)在存储桶之间复制文件时,需要:
Bucket-A
)上读取访问权限Bucket-B
)上写访问权限当您假设LogAccess-role
时,您会收到对Bucket-A
具有读访问权限的凭据。这太棒了!但是,这些凭据无权写入Bucket-B
,因为它位于单独的帐户中。
要解决此问题,您应该在Bucket-A上创建一个Bucket策略,该策略授予LogAccess-role
对Account-B
的写访问权限。 “存储桶策略”如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT-A:role/12345-LogAccess-role"
},
"Action": [
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*"
]
}
]
}
(您可能需要其他权限。请检查所有错误消息以获取提示。)
这样,LogAccess-role
将能够从Bucket-A
读取并写入Bucket-B
。