【问题标题】:How boto3 find assume role providerboto3 如何找到承担角色提供者
【发布时间】:2020-10-09 07:32:48
【问题描述】:

我想问的主要问题是boto3如何找到IAM角色。

我正在使用 AWS EC2 实例来测试 docker 容器。我将 IAM 角色分配给 EC2 实例,并且没有为 Docker 映像分配任何 AWS ACCESS 配置。但是当我运行 Docker 镜像时,我可以使用分配给 IAM 角色的 AWS 资源。

这就是 boto3 在 boto3 文档中查找凭据的方式。

  1. 在 boto.client() 方法中将凭据作为参数传递
  2. 在创建 Session 对象时将凭据作为参数传递
  3. 环境变量
  4. 共享凭据文件 (~/.aws/credentials)
  5. AWS 配置文件 (~/.aws/config)
  6. 担任角色提供者
  7. Boto2 配置文件(/etc/boto.cfg 和 ~/.boto)
  8. 配置了 IAM 角色的 Amazon EC2 实例上的实例元数据服务。

我猜#8 是 boto3 查找凭证的方式。但我想清楚地知道这是如何工作的。

【问题讨论】:

    标签: amazon-web-services docker amazon-ec2 boto3


    【解决方案1】:

    正如您正确指出的那样,它是通过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
    

    然后要获得实际的AccessKeyIdSecretAccessKeyToken,您可以在 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
    

    重要的是元数据服务将刷新凭据。因此,当您从元数据中获取凭据时,您总是会得到有效的凭据。

    【讨论】:

    • @Huh 没问题。很高兴我能帮上忙。
    猜你喜欢
    • 2017-11-20
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2020-04-29
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多