其实,EC2内部是也是通过role来调用sts(AWS Security Token Service)
来获取凭证信息的。这种动态获取的凭证是有生存周期的,过期自动失效。
ec2会在过期之前自动获取新的credentials,aws sdk
不需要关注过期的问题,ec2 会把有效的credentials保存在meta-data
中,sdk只需要从meta-data
中获取即可:
本节将测试获取一台ec2机器role的credential,配置到另一台机器上进行访问。
准备两台EC2, 一台绑定了role可以访问S3, 另一台不绑定role
在没有访问S3权限的机器上执行:
在另一台有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
:
此时在没有访问S3权限的机器上执行s3命令,也可以访问到S3。
但这个访问时长只有1个小时。
使用role这种方式比使用ak/sk
更安全,因为它的访问凭证会自动轮转,有生效时间限制。