AWS与OpenID Connect的跨帐户角色



我想了一会儿如何以最好的方式解释这一点。我有两个AWS帐户,我正试图与PROD和MGMT建立跨帐户角色。

大局;在我的bitbucket repo中,有一个terraform ACM模块,它使用OpenID Connect执行并与AWS(MGMT帐户(进行身份验证,并承担SCM角色,使用此角色,脚本在MGMT帐户上创建证书,并通过在PROD帐户中创建CNAME记录来验证该证书。

当脚本试图验证记录时,证书会被创建,但由于访问被拒绝,证书失败了,尽管我在SCM角色下有一个sts角色,并且PROD上有一个角色可以让SCM角色完全访问Route53。

MGMT账户下的角色:ARN:arn:aws:iam::987654321:role/bitbucket.pipelines

sts在供应链管理下承担MGMT账户中的角色:

{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": "arn:aws:iam::123456789:role/AWS-SCM-ROLE"
}}

PROD帐户中的角色ARN:arn:aws:iam::123456789:role/AWS-SCM-ROLE:信任关系:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::987654321:role/bitbucket.pipelines"
]
},
"Action": "sts:AssumeRole"
}
]}

图表:

Bitbucket
+-------------+      OpenID Connect         +-----------------+
|             +----------------------------->                 |
|  Terraform  |                             |   MGMT Account  |
|             <-----------------------------+                 |
+-------------+     Token: bitbucket role   +-----------------+

Bitbucket
+-------------+     Execute TF ACM Module   +-----------------+
|             +----------------------------->                 |
|  Terraform  |                             |   MGMT Account  |
|             <-----------------------------+                 |
+-------------+        Exit Code 0          +-----------------+

Bitbucket
+-------------+      ACM Cont. Execution    +-----------------+
|             +----------------------------->                 |
|  Terraform  |                             |   PROD Account  |
|             <-----------------------------+                 |
+-------------+        Exit Code 1          +-----------------+

您可以直接使用aws提供程序在Terraform中执行角色扮演。

但如果我理解正确的话,你会对Terraform准备好你的环境后会发生什么更感兴趣,并且你想让你的脚本扮演与Terraform分离的角色。

那么,在我们的第一个角色中,我们从策略中获得哪些权限?从这里开始,没有启用route53:Get等的Action块。在最初建立这些关系时,很难确定您在哪个帐户中执行。用于调试的一个方便的aws-cli命令是:

aws sts get-caller-identity

这将返回有关调用该命令的角色的信息。这将帮助您确保您使用正确的身份(并且使用当前凭据对其进行身份验证(针对区域&要在执行上下文中与之交互的帐户。

如果这没有帮助,请提供错误消息和有关这些位桶脚本/管道正在做什么的更多详细信息。

最新更新