EC2 Role与STS

其实,EC2内部是也是通过role来调用sts(AWS Security Token Service)来获取凭证信息的。这种动态获取的凭证是有生存周期的,过期自动失效。

ec2会在过期之前自动获取新的credentials,aws sdk不需要关注过期的问题,ec2 会把有效的credentials保存在meta-data中,sdk只需要从meta-data中获取即可:

image-20230816080630507

Get EC2 credentials

本节将测试获取一台ec2机器role的credential,配置到另一台机器上进行访问。

准备两台EC2, 一台绑定了role可以访问S3, 另一台不绑定role

在没有访问S3权限的机器上执行:

image-20191206151303242

在另一台有ec2 role的机器上执行:

$ curl 169.254.169.254/latest/meta-data/iam/security-credentials/ec2-for-postback
{
  "Code" : "Success",
  "LastUpdated" : "2019-12-06T06:17:19Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ASIA34VFHDGX3CKSNC67",
  "SecretAccessKey" : "seb803PW1JhufVbJzwOxfLRIdJ5kvFJriZn8IuB5",
  "Token" : "IQoJb3JpZ2luX2VjECcaCXVzLWVhc3QtMSJHMEUCIQD4e7JfCafaigV8W7sPjwniW4rpZrLNbCRkpzY/RdHgfQIgdGS1LKyTtmn+zTdTb1wtME9VnpPXy49bYpeGd8ZpxUsq0AIIbxAAGgw4MTc0NjQwMjM0NzEiDIWXxEyH+AehsyxKaSqtAsHRp/HAPToeSKac/hiIpxQz8kaD6Fsvso6mCZkCLRNByWnKg4zLNFYiVtDnCatC+b0ygQSk0kfxiJWnS8dYAEjhSvGjjksvCRnD55JFmTteo2y+ex51Sp1sBk1zeu3vbJe3vqGbD3DmJKwSfKo+cgnpdLFMleshv+unkVACrhkZxvT4ntaDiHJBIqpnB91tKZnnfFb3G8Q4d+/7xaY4TDCT509g5Pm4Dozww3lMo5aIZp7RDdIU7jm60NT3UsGl+ELGyLyS6vH3XZwKkh03X4T+zs5BBmjKhynuUEyHPOkBbZMNyu5bVbWfPz2gL8Pqo48MiHb35Hpx8fGwQPrDOTTJqw617MSEBhVKLrjMBAoouVDzKJgfjdlXWJqkEpQZXIG3NJnUzF88NSOVqfIw5OSn7wU6zwLTTwmIEofv4roBUEKD3rqNyWF8ESXa3XeVXUQp5RANiM0yEWQqhrDXDEC32kFiCJtdnDYbHUByBFZ18PxT8JDhgSJG1tOaIhOocX9fj4R0qJG11vTDBAZINYeqZc7QkbinTnmmD6a5rdBOia2IppuVqpc0qWrT19VghMVCcRFBV1boQ4Xg4xtDtsJiHhNKyXhQR4n3M1bFZ8vxU1ctA6y66b7B4qQX+GjfVb9dM6tZlysYuUiFektkihGHMvmpg/r08LMwjOOfgr06UoPxXxw5BjLaFEAedGiGTMz+BsrcfqoqDkSdCuCwB/qJSiMn6bO5x5huBvytobnr1H8hAu4pLdxbYGWYoqbLTXs2ar8RBuAiOorh8ot+WUmHe3zZ+cmSdtUyKht278qiWZCIHWluwpdmKaZuZwISw6FBrKKWJhizjtUYAy2E0GSUP7MVog==",
  "Expiration" : "2019-12-06T12:35:08Z"
}

获取到AccessKeyId、SecretAccessKey、Token,在另一个没有访问S3权限的机器上配置~/.aws/credentials:

image-20191206151827526

此时在没有访问S3权限的机器上执行s3命令,也可以访问到S3。

image-20230803094021580

但这个访问时长只有1个小时。

结论

使用role这种方式比使用ak/sk更安全,因为它的访问凭证会自动轮转,有生效时间限制。