java aws访问授权 实例_向 EC2 实例授予对 S3 存储桶的跨账户访问权限

如何向我的 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 管理控制台。

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


版权声明:本文为weixin_34677884原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。