当前位置: 首页 > 知识库问答 >
问题:

boto3如何找到假设角色提供者

梁俊智
2023-03-14

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

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

这就是boto3如何在boto3留档中找到凭据。

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

我想8是我们找到凭证的方式。但我想知道这是如何运作的。

共有1个答案

岳卓君
2023-03-14

正如您正确指出的,它是通过实例元数据实现的。

元数据具有已知的格式。因此,如果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

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

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

 类似资料:
  • 我在调用代入 STS 方法时遇到错误。它说用户无权对资源执行。 我做了以下工作: 我创建了一个用于访问 S3 存储桶的角色。 我在策略模拟器上运行了一个测试,工作正常 我创建了一个新组,并在其中创建了一个新策略,该策略对所有资源启用所有 sts 操作。 我使用策略模拟器运行了一个测试,以 sts 承担角色,指向在步骤 1 中创建的角色的 ARN;并且工作正常; 我创建了一个新用户,并将其放在步骤

  • 您可通过点击侧边栏角色栏进入角色管理页面。 添加角色 除系统提供角色之外,您可根据企业实际情况自定义角色。点击“添加角色”进行设置:•输入角色名称(必填) •输入角色说明(选填) •勾选角色功能权限(审批、单据为默认权限,不可删除) •勾选角色管理范围(项目或部门) 修改系统角色 主管需要您在部门模块或项目模块设置部门主管或项目主管。具体请详见【通过部门、项目管理员工】

  • 我正在尝试将文件从一个账户(源账户)中的 S3 存储桶移动到另一个账户(目标账户)中的 S3 存储桶,我正在使用 sagemaker 笔记本,因此我有一个 sagemaker 角色。我在我的团队帐户中也有一个角色,它具有完全的s3访问权限和完全的管理员访问权限,并且在信任关系中,我为目标帐户角色arn和sagemaker角色arn提供了一个角色。目标帐户在其信任策略中还具有我的团队角色 arn 和

  • 我使用预先签名的post/url上传到S3并从S3下载。预签名的url/post是通过Lambda函数中的boto3生成的(它是通过zappa部署的)。 当我添加我的和作为env变量时,效果非常好。然后,我删除了我的凭据,并向lambda添加了一个IAM角色,以完全访问S3存储桶。之后,lambda返回带有预先签名的URL和运行良好,但是当我想通过URL上传对象时,它返回一个错误。使用的密钥id,

  • 问题内容: 我一点都不熟悉ASP.NET成员资格/角色。这是我第一次使用它,也是我第一次尝试使用ASP.NET MVC。当我为MVC创建第一个项目时,它为我提供了一个可爱的模板来创建帐户。我很高兴看到我不必手动执行此操作。但是,它失败了,因为它无法连接到SQL Server。我没有SQL Server,我有MySQL。有什么简单的方法可以使该系统改为使用MySQL,还是必须创建自己的身份验证? 问

  • 我正在尝试在 Swift 中创建一个 iOS 应用程序,该应用程序使用 AWS Lambda 使用以下身份验证服务 - https://github.com/danilop/LambdAuth 它使用适用于 iOS 的 AWS 移动开发工具包与迪纳摩数据库和 Lambda 进行通信 - http://docs.aws.amazon.com/mobile/sdkforios/developergui