无需IAM访问密钥的非AWS外部实体访问AWS资源最佳方案咨询
无需IAM访问密钥从Azure/GCP访问AWS资源的最佳落地方法
这种场景下的标准生产级方案是AWS IAM OIDC(OpenID Connect)身份提供商联邦认证,完全不需要创建和管理长期有效的IAM访问密钥,所有访问凭证都是自动轮转的短期凭证,安全性和易维护性都远高于静态密钥方案。
通用实现逻辑
- 在AWS IAM中注册对应云厂商的身份提供商作为OIDC信任方
- 为外部云资源的身份主体(Azure的服务主体、GCP的服务账号)绑定AWS IAM角色,配置角色信任策略允许对应外部身份兑换凭证
- 外部云的 workload 直接调用AWS STS的
AssumeRoleWithWebIdentity接口,用自身原生的身份ID令牌兑换AWS临时访问密钥 - 临时密钥默认有效期最短15分钟、最长12小时,自动过期无需手动轮转
针对Azure场景的具体配置步骤
- 首先在Azure AD中注册应用,记录应用的客户端ID、租户ID
- 进入AWS IAM控制台,创建OIDC身份提供商,提供商URL填
https://sts.windows.net/<你的Azure租户ID>/,受众填之前注册的Azure应用客户端ID - 在AWS中创建访问所需资源的IAM角色,修改角色的信任策略,示例配置如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<你的AWS账号ID>:oidc-provider/sts.windows.net/<你的Azure租户ID>/" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "sts.windows.net/<你的Azure租户ID>/aud": "<你的Azure应用客户端ID>" } } } ] }
- Azure侧的 workload 先获取Azure AD颁发的ID令牌,调用
aws sts assume-role-with-web-identity命令兑换AWS临时凭证即可访问AWS资源。
针对GCP场景的具体配置步骤
- 首先在GCP中创建服务账号,记录服务账号的邮箱
- 进入AWS IAM控制台,创建OIDC身份提供商,提供商URL填
https://accounts.google.com,受众填你自定义的校验值(比如aws) - 在AWS中创建访问所需资源的IAM角色,修改角色的信任策略,示例配置如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<你的AWS账号ID>:oidc-provider/accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:aud": "aws", "accounts.google.com:sub": "<你的GCP服务账号唯一ID>" } } } ] }
- GCP侧的 workload 调用
gcloud auth print-identity-token获取GCP颁发的ID令牌,再调用STS接口兑换AWS临时凭证即可。
方案优势
- 完全消除静态IAM密钥的泄露风险,所有凭证都是短期自动过期
- 无需跨云管理密钥生命周期,直接复用各云原生的身份体系
- 权限控制粒度更细,可直接限制只有特定外部身份才能兑换对应AWS角色的权限
内容的提问来源于stack exchange,提问作者Rohit Sarkar
相关产品推荐
相关产品推荐

