从 EC2 实例访问 AWS secrets manager 时出现权限错误

Permission error when accessing AWS secrets manager from an EC2 instance

我在 linux EC2 实例上有一个 Python 程序 运行,我试图从 secrets manager 获取一个值,但我一直收到权限错误

An error occurred (AccessDeniedException) when calling the GetSecretValue operation: User: arn:aws:sts::user_id_here:assumed-role/AmazonSSMRoleForInstancesQuickSetup/somestring is not authorized to perform: secretsmanager:GetSecretValue on resource: arn:aws:secretsmanager:eu-west-2:xxx_my_secret

在我的 IAM 设置中,用户位于具有管理员访问权限的组中,然后用户本身具有权限 SecretsManagerReadWrite

我需要更改哪些权限?

访问EC2的用户与机器本身的角色不同

机器对 secrets manager 的角色和访问权限由

  • 用户角色(在 AWS 控制台中创建 EC2 时),或
  • ./aws/credentials 和./aws/configuration

在我的代码中,我使用 boto.utils.get_instance_identity() 来获取区域。然后从 boto3.Session().get_credentials().get_frozen_credentials()

得到 access_key 和 secret_key

您可能还想使用 botocore.credentials.RefreshableCredentials,因为来自 get_frozen_credentials() 的令牌已过期。