繁体   English   中英

允许从 Amazon EC2 实例跨账户访问 Amazon S3 存储桶

[英]Allow cross-account access from an Amazon EC2 instance to an Amazon S3 bucket

我在账户 B 中有 S3 存储桶“跨存储桶”。现在我希望账户 A 中的 EC2 访问账户 B 中的这个存储桶“跨存储桶”。

我需要使用 IAM 角色来实现这一点,因为我们不允许创建用户。

我已使用以下模板在帐户 B 中创建角色

 AWSTemplateFormatVersion : '2010-09-09'
 Description: 'Cross account role for S3'

 Parameters:
   AccountId:
   Type: String
   Description: Account ID of admin account (containing user to allow)

 Resources:
 CrossAccountRole:
Type: AWS::IAM::Role
Properties:
  AssumeRolePolicyDocument:
    Statement:
      - Effect: Allow
        Action: sts:AssumeRole
        Principal:
          AWS:
            - !Sub arn:aws:iam::${AccountId}:root
  Path: /
  Policies:
    - PolicyName: my-s3-delegate
      PolicyDocument:
        Statement:
          - Effect: Allow
            Action:
              - s3:ListBucket
              - s3:GetObject
            Resource: "*"
  RootInstanceProfile: 
Type: "AWS::IAM::InstanceProfile"
Properties: 
  Path: "/"
  Roles: 
      - 
        Ref: "CrossAccountRole"
    

创建此角色后,我应该如何将其附加到帐户 A 中的实例? 或者我在这里遗漏了什么?

创建此角色后,我应该如何将其附加到帐户 A 中的实例?

您没有将其附加到 Acc A 中的实例。相反,您在 Acc A 中创建了一个实例角色。该角色将有权从 Acc B 中担任该角色

因此,实例角色将具有类似于以下的策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "<ARN-of-ROLE-in-ACC-B>"
            }
        }
    ]
}

然后在实例上运行的任何应用程序都必须使用sts assume-role来实际承担角色并在 Acc B 中执行操作。

你的情况是:

  • 账户 A 中的 Amazon EC2 实例
  • 账户 B 中的 Amazon S3 存储桶
  • 您希望允许 EC2 实例访问存储桶

有两种方法可以做到这一点:

选项 1:存储桶策略

只需将存储桶策略添加到 Account-B 中的存储桶,以授予对 EC2 实例使用的 IAM 角色的访问权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ],
            "Principal": {
                "AWS": [
                    "arn:aws:iam::ACCOUNT-A:role/my-ec2-role"
                ]
            }
        }
    ]
}

EC2 实例将使用其正常的 IAM 角色凭证来访问存储桶。 还要确保 IAM 角色已授予使用 Amazon S3 访问存储桶的权限:

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

选项 2:担任角色

  • 在 Account-B 中创建有权访问存储桶的 IAM 角色
  • EC2 实例上的代码调用 IAM 角色上的AssumeRole()
  • 使用返回的凭证访问存储桶

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM