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

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

一个是Github的Identity Provider:

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

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

现在我们已经通过 CloudFormation 设置了 IAM IdP,我们接下来设置 GitHub 密钥以在 OIDC 授权过程中使用它们。
在github仓库的settings中,点击actions下的New repository secret:

创建AWS_ACCOUNT_ID secret:

按同样的步骤创建AWS_DEPLOY_ROLE:

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

同样创建两个secret,分别为SUBNET_ID和VPC_ID:
