如何授予我的 Amazon EC2 实例访问另一个 AWS 账户中的 Amazon S3 存储桶的权限?
我希望使用 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 policy。
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 实例中,在 CLI 配置文件中为角色创建配置文件
注意:如果您使用 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
相关信息
相关内容
- 已提问 2 个月前lg...
- 已提问 2 个月前lg...
- 已提问 2 个月前lg...
- 已提问 1 个月前lg...
- 已提问 4 个月前lg...
- AWS 官方已更新 7 个月前
- AWS 官方已更新 8 个月前
- AWS 官方已更新 5 个月前
- AWS 官方已更新 1 年前