概要
熟悉aws sts是什么,并使用sts对EC2进行赋权
技术细节
当前有一个EC2实例和一个S3存储桶,这个S3存储桶代表众多AWS资源之一。EC2想要访问这个AWS资源,有两种方式可以做到。
第一种方式是在EC2中通过aws configure命令配置AWS访问密钥和私有访问密钥后访问资源;
第二种方式是附加IAM角色到EC2实例,然后附加IAM角色策略添加STS 让我们的EC2能够访问AWS资源。
这里走第二种方式
创建EC2 的s3_readonly 的角色
创建一个role为即将绑定到EC2的IAM role
创建EC2 带上这个IAM role
启动一个新EC2, 在高级选项‘IAM 实例配置文件’里
查看信任策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Principal": {
"Service": [
"ec2.amazonaws.com"
]
}
}
]
}
信任关系选项卡,我们点击编辑信任关系看下策略内容:
Principal委托人指定了一个service,http://ec2.amazonaws.com这个service;
action是sts:assumeRole,整个策略的意思为允许http://ec2.amazonaws.com服务执行sts:assumerole来获取临时安全凭证。
sts:assumerole这个动作非常关键,如果我们将这部分内容去掉,那么将无法生成访问密钥等安全凭证,ec2也将无法访问s3存储桶。
保存
检查EC2实例的IAM 角色,在安全项下
执行aws s3 ls 可以看到读取权限起作用
我们可以直接通过EC2只读访问S3存储桶。
以上我们复习了IAM角色的工作方式。
要在 EC2 实例中查看绑定的 IAM 角色信息,可以使用以下步骤:
- 使用元数据服务
在 EC2 实例中,你可以通过访问元数据服务来获取绑定的 IAM 角色信息。执行以下命令:
curl http://169.254.169.254/latest/meta-data/iam/info
- 查看输出
该命令将返回一些关于 IAM 角色的信息,包括角色的 ARN。例如,输出可能看起来像这样:
{
"Code": "Success",
"LastUpdated": "2024-09-26T13:00:00Z",
"InstanceProfileArn": "arn:aws:iam::123456789012:instance-profile/your-instance-profile-name",
"InstanceProfileId": "AIPAJXXXXXX"
}
- 获取安全凭证
如果你还想查看与该角色相关的安全凭证,可以使用以下命令:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
这将返回绑定到实例的 IAM 角色名称。然后你可以使用角色名称获取详细的安全凭证信息:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/your-role-name/
[图片]
有一点需要注意的是,我们在这个EC2的meta data中获取accessKeyId、SecretAccessKey以及会话Token临时安全凭证,并不是IAM角色生成的,它们是AWS STS服务生成的,STS是负责提供上述这些临时安全凭证的服务。IAM角色与STS服务之间会建立信任关系,通过STS服务获得这些凭证。
小结
STS 集成操作,很多时候aws的一些服务并没有显式去使用它包含在一些不显眼的地方