AWS设置Github Federation

AWS IAM IdP 支持 OpenID Connect (OIDC) 与 GitHub 存储库和分支的联合。

AWS上受信任的角色将允许特定Github仓库的 GitHub Actions 使用临时凭证访问 AWS 账户。 我们将不需要使用长期的AK/SK,不再需要担心密钥轮换。

我们先部署一个 CloudFormation 模板,该模板将设置一个 AWS IAM 身份提供商和一个 AWS IAM 角色,该角色可以被Github来assume Role。 此外,可以缩小 IAM Role的访问范围,仅允许特定分支访问它。在我们后面的实验中,会将主分支中已批准的Pull request的代码更改部署到 AWS 账户。


下载CloudFormation:

mkdir -p workshop && cd workshop;
git clone https://github.com/aws-actions/configure-aws-credentials.git
cd configure-aws-credentials/examples/federated-setup/

部署CloudFormation,注意将GitHubOrganization替换成Github的用户名,将RepositoryName替换成仓库名:

aws cloudformation deploy --capabilities=CAPABILITY_NAMED_IAM --template-file ./github-actions-oidc-federation-and-role.yml --stack-name github-actions-federation --parameter-overrides RoleName=workshop-GA GitHubOrganization=UPDATE_ME RepositoryName=UPDATE_ME --region us-east-1

image-20231111215503191

部署完成后,会看到有两个资源创建完成:

image-20231111215620318

一个是Github的Identity Provider:

image-20231112114018763

另一个是Role,可以让Github来assume:

image-20231112113843030

这个role上添加了administrator的权限:

image-20231112113908966

添加Github Repository secret

现在我们已经通过 CloudFormation 设置了 IAM IdP,我们接下来设置 GitHub 密钥以在 OIDC 授权过程中使用它们。

在github仓库的settings中,点击actions下的New repository secret:

image-20231111215947491

创建AWS_ACCOUNT_ID secret

)

按同样的步骤创建AWS_DEPLOY_ROLE

image-20231111220320174

后面的实验我们还要创建一个EC2, 先选择好它的VPC和所属子网:

image-20231111220547428

同样创建两个secret,分别为SUBNET_IDVPC_ID:

image-20231111220647632