如何向我的 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