正如您正确指出的那样,它是通过instance metadata。
元数据已知format。因此,如果 boto3 在从 1 到 7 的步骤中找不到凭据,它将检查元数据。
检查过程相当简单。您可以在实例或您自己的程序中自己完成。
例如,要使用curl手动获取凭据,您可以执行以下操作:
curl http://169.254.169.254/latest/meta-data/iam/info
将输出(示例):
{
"Code" : "Success",
"LastUpdated" : "2020-06-19T05:08:31Z",
"InstanceProfileArn" : "arn:aws:iam::xxxxxxx:instance-profile/EC2managementRole",
"InstanceProfileId" : "AIPAI2GXQHM47WJLA2OTI"
}
请注意,有实例配置文件的 arn。
你也可以使用
curl http://169.254.169.254/latest/meta-data/iam/security-credentials
提供与您的实例配置文件关联的角色名称:
EC2managementRole
然后要获得实际的AccessKeyId、SecretAccessKey 和Token,您可以在 boto3 会话中使用它们来获得对 aws 服务的权限,您可以这样做:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2managementRole
给出:
{
"Code" : "Success",
"LastUpdated" : "2020-06-19T05:08:04Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIASZHPM3xxxxxxxxxxxxxxx",
"SecretAccessKey" : "ri7u3mK+ZMvork0xxxxxxxxxxxxxx",
"Token" : "IQoJb3JpZ2luX2VjEIb//////////wEaCXVzLWVhc3QtMSJIMEYCIQDcmeIpspYPhLb7Ba/iNxYxxxxxxxxxxxxxxxvJCR4DqVK2+Ai/Kr0DCP7//////////wEQAhoMMTkxNjI4MTA2Mjg3Igz2SUVJuLKyZkc6U10qkQNcTZxwRIC1tSErfXRjKPrlpV6wIr478lujrBGHef6vtoVAy8X+HDRk3kWEmqKWscZFFIBLDm+vpsec9aIen70XZS4zNFyygIFW7NcTV3p6gggqR6ed3jycxrcaD7IAk8HVTbA6SqfPgE/B8VLwF9u9zEvPC3km7oxxxxxxxxxxxxxxxxxxxxxxxxxJDaJDaAStICJ0QgY10zOqDhHR7ENTEveKE5g+3RYeq4/GUCLkMmyI0f6PWxZ6OHrmORRnykYsUjuFvVjuODkrXF7JvZEAz/PkHCJJoXqf2aqZGyJ7J4jYHQZTU0QUg2IGZxZIBvP3g6a3+r8/74u//xebZmUwGn0YfvL4PZgsrJ7JUl40QjQ+iCab8i4rffho4f/g/em3u+DbZjGzWnQ3EhKYdVoMR//9yJH/TXzRTxNeoLeIXatpc6ftSNcP4aacqZs3TVAYb+geAzpLSlSrWUSy32Bdx31kGFBk/q5ErQ56S8zWJ/PN/NbbvSqUDYOW9ub0sBvKWAT7zDPkLH3BTrqAc6HExLUuRlUM9s5EhTXDkl3NpRJ45J4zvyxiEykqxbPACpG1SdgxxxxxxxxxxxxxxxxxxxxxxB/8eN040f/NgEpSltFXLWS6goIeuIMouYwdA8qBigwwfFF/02555eUJQWH0r+ReIZF7EQmTfdkBZKRqsKz1cVfHcscEZwD86MpfY7DU31Pi4eh9J6M2sgU6CGylAalYXAzPPgeCpQCkCGyKFHXs8D22lt2qCJxaQni7GqBeronHvVmxX9wzTxCWlm4Or423Pccqh3Lw6g+PfLB3SViSPb4aEw==",
"Expiration" : "2020-06-19T11:43:31Z"
}
或一个快捷方式,其结果与上述相同:
curl http://169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance
重要的是元数据服务将刷新凭据。因此,当您从元数据中获取凭据时,您总是会得到有效的凭据。