如何授予我的 Amazon EC2 实例访问另一个 AWS 账户中的 Amazon S3 存储桶的权限?

上次更新时间:2021 年 11 月 17 日

我希望使用 Amazon Elastic Compute Cloud (Amazon EC2) 实例访问另一个账户中的 Amazon Simple Storage Service (Amazon S3) 存储桶。如何在不在实例上存储凭证的情况下授予此访问权限?

解决方法

注意:授予实例访问 Amazon S3 存储桶权限的步骤与授予访问另一个账户中的其他 AWS 资源的步骤相似。

按照以下步骤操作,向账户 A 中的 Amazon EC2 实例授予对另一个账户(账户 B)中的存储桶的访问权限。

从账户 B 创建 IAM 角色

1.    使用账户 B 登录到 AWS 管理控制台

2.    打开 AWS Identity and Access Management (IAM) 控制台

3.    在导航窗格中,选择角色

4.    选择 Create role(创建角色)。

5.    对于选择受信任实体的类型,选择其他 AWS 账户

6.    对于账户 ID,输入账户 A 的账户 ID。

7.    选择下一步: 权限

8.    附加一个策略到委托 Amazon S3 访问权限的角色。例如,此策略将会授予对存储桶中所存储对象的 s3:GetObject 访问权限:

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

注意:您可以根据自己使用案例所需的 Amazon S3 存储桶级和对象级权限修改 IAM 策略。

9.    选择下一步: 添加标签

10.    您可以向角色添加可选标签。或者,您可以将字段留空,然后选择下一步: 审核

11.    对于角色名称,请为角色输入一个名称。

12.    选择 Create role(创建角色)。

从账户 B 获取角色的 ARN

1.    从 IAM 控制台的导航窗格中选择角色

2.    选择您创建的 IAM 角色。

3.    记下列出的 Role ARN(角色 ARN)值。

从账户 A 中创建另一个角色(实例配置文件)并将其附加到实例中

1.    使用账户 A 登录到 AWS 管理控制台

2.    打开 IAM 控制台

3.    从导航窗格中,选择角色

4.    选择 Create role(创建角色)。

5.    对于选择受信任实体的类型,选择 AWS 服务

6.    对于选择将使用此角色的服务,选择 EC2

7.    选择下一步: 权限

8.    选择下一步: 标签

9.    您可以向角色添加可选标签。也可以将此字段留空,然后选择 Next: Review(下一步: 审核)。

10.    对于角色名称,请为角色输入一个名称。

11.    选择 Create role(创建角色)。

12.    从角色列表中,选择刚创建的角色。

13.    选择添加内联策略,然后选择 JSON 视图。

14.    输入以下策略。将 arn:aws:iam::111111111111:role/ROLENAME 替换为您在账户 B 中创建的 IAM 角色的 Amazon 资源名称 (ARN)。

{ 
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::111111111111:role/ROLENAME"
        }
    ]
}

15.    选择查看策略

16.    对于名称,为策略输入名称。

17.    选择 Create policy

18.    附加一个 IAM 角色(实例配置文件)到您用于访问 Amazon S3 存储桶的 Amazon EC2 实例。

从此 Amazon EC2 实例使用您的凭证配置角色

注意:如果您使用 SSH 和会话管理器连接到 EC2 实例,则必须同时为 ec2-user 和 ssm-user 执行这些步骤。

1.    连接到此 Amazon EC2 实例。有关更多信息,请参阅连接到您的 Linux 实例连接到您的 Windows 实例

2.    连接到实例后,验证该目录是否已有名为 ~/.aws 的文件夹。

要查找 ~/.aws 文件夹,请运行以下 ls 命令以列出目录:

ls -l ~/.aws

3.    如果要查找 ~/.aws 文件夹,则继续下一步。如果目录尚未包含 ~/.aws 文件夹,则通过运行 mkdir 命令创建文件夹:

mkdir ~/.aws/

4.    在 ~/.aws 文件夹中,使用文本编辑器创建一个文件。将该文件命名为 config

5.    在文件中,输入以下文本。将 enterprofilename 替换为您附加到实例的角色的名称。然后,将 arn:aws:iam::111111111111:role/ROLENAME 替换为您在账户 B 中创建的角色的 ARN。

[profile enterprofilename]
role_arn = arn:aws:iam::111111111111:role/ROLENAME

credential_source = Ec2InstanceMetadata

6.    保存文件。

验证实例配置文件

要验证您实例的角色(实例配置文件)是否可以在账户 B 中代入该角色,请在连接到实例时运行以下命令。将 profilename 替换为您附加到该实例的角色的名称。

$aws sts get-caller-identity --profile profilename

该命令将返回与以下示例类似的响应:

"Account": "11111111111",

"UserId": "AROAEXAMPLEID:sessionName",

"Arn": "arn:aws:sts::111111111111:assumed-role/ROLENAME/sessionName"

确认 "Arn" 的值与您在账户 B 中创建的角色的 ARN 一致。

验证至 Amazon S3 存储桶的访问权

要验证您的实例是否可以访问 Amazon S3 存储桶,请在连接到实例时运行以下列出命令。将 profilename 替换为您附加到该实例的角色的名称。

aws s3 ls s3://DOC-EXAMPLE-BUCKET --profile profilename

如果您的实例可以成功访问存储桶,则您将收到一个列出存储桶内容的响应,类似于以下内容:

PRE Hello/
2018-08-15 16:16:51 89 index.html

这篇文章对您有帮助吗?


您是否需要账单或技术支持?