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
: