美文网首页
S3 cross account 访问的几种实现

S3 cross account 访问的几种实现

作者: zpei0411 | 来源:发表于2020-08-30 21:59 被阅读0次

我们知道 S3 有多种权限管理方法,下面主要介绍如何使用 role 来进行跨账户访问 S3 的资源:
我们假设有两个 account,Account A 和 Account B
Account A: 有一个 S3 bucket: test-a
Account B: 有一个 role-b
Account B 的 role 希望可以访问到 Account A 的 S3 的资源

1. 使用 S3 bucket policy + IAM policy

1) 获取 Account B 的 IAM role(role-b) 的 ARN。
2)在 Account A 中附加以下的 bucket policy:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {"AWS": "arn:aws:iam::Account B:role/role-b"},
            "Action": ["s3:ListBucket","s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::test-a/*",
                "arn:aws:s3:::test-a"
            ]
        }
    ]
}

3)在 Account B 中允许 role-b 访问 Account A中的 bucket(test-a) 的对象, 对 role-b 附加以下 policy:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::test-a",
                "arn:aws:s3:::test-a/*"
            ]
        }
    ]
}

2. 基于身份的 IAM role

  1. 在 Account A 中创建一个 IAM 角色 role-a。然后,向该角色授予执行所需 S3 操作的权限。在角色的信任策略中,信任 Account B 中的 role-b:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::AccountB:role/role-b"
      },
      "Action": "sts:AssumeRole"
    },
   {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::bucket-a/*"
        }
  ]
}
  1. 在 Account B 中允许的 role-b assume Account A 中创建的 role-a。

{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::AccountA:role/role-a"
}
}
3)Account B role-b 去 assume role-a:

aws sts assume-role --role-arn arn:aws:iam::Account  A:role/role-a  --role-session-name s3-access-example

然后带入返回的 credential:

export AWS_ACCESS_KEY_ID=$AccessKeyId
export AWS_SECRET_ACCESS_KEY=$SecretAccessKey
export AWS_SESSION_TOKEN=$SessionToken

相关文章

网友评论

      本文标题:S3 cross account 访问的几种实现

      本文链接:https://www.haomeiwen.com/subject/msfysktx.html