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

上次更新时间:2020 年 11 月 3 日

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

解决方法

注意:虽然此示例仅针对访问 Amazon S3 存储桶,但这些步骤同样适用于向您的实例授予访问其他账户中的其他 AWS 资源的权限。

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

从账户 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",
            "Resource": [
                "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.    对于 Choose the service that will use this role(选择将使用此角色的服务),选择 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 实例使用您的凭证配置角色

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

2.    连接到实例后,验证该目录是否已有名为 ~/.aws 的文件夹。要查找此文件夹,可以运行列出目录的命令,类似于以下内容:

ls -l ~/.aws

3.    如果要查找 ~/.aws 文件夹,请继续下一步。如果目录尚未包含 ~/.aws 文件夹,请通过运行类似于以下内容的命令创建文件夹:

mkdir ~/.aws/

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

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

[profile profilename]
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

这篇文章对您有帮助吗?


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