Githubアクションによる安全なAWS - CDK展開
16425 ワード
Githubアクションは連続的な統合を可能にし、AWS CDKはインフラストラクチャをコードとして有効にします.
このガイドでは、AWSのアカウントにGithubアクションからAWSのCDKスタックの展開を自動化する安全な方法を提供します.
あなたのGitHubアカウントで長寿命の資格情報を保存する必要がないので、より安全です👍 当初出版here
関連文書 GitHub open ID connect
Using open ID connect with AWS IAM
動作方法
私たちはオープンID接続を利用し、Githubに一時的な同盟国を与えます.このアイデンティティはあなたのAWSアカウントの役割を仮定するために信頼されるでしょう.
アイデンティティ(GITHUB)が役割を仮定するとき、我々は2つのことをすることによってそれのアクセスを確保します: 一時的なAWS秘密キーとアクセスキーを与えることは、1時間で期限が切れます. JTWUBによるJWTからAWSへのクレームを使用して、許容されるIDの範囲を狭める.
セットアップ
そうすれば、 AWS CDKスタックを使用して、アイデンティティプロバイダーと信頼関係を作成する1回のGithubアクション. アイデンティティを使用して一時的なアクセスを得、AWSのCDKスタックを展開します.
ブートストラップスタックの作成
新しいAWS CDKアプリケーションを作成できます.
私たちは、AWSの間の信頼関係を作成するためにプリンシパルを使用するでしょう、そして、そのようにgithub.
私はあなたを仮定する例を提供しますhttps://github.com/simonireilly そして、あなたは素晴らしいプロジェクトと呼ばれる
ブートストラップの配備
作成されたアクセスキーのセットを使用すると、ブートストラップを展開できます.これはあなたのチームのリンクを設定するより高い特権を持つ誰かを可能にします👍
これはGithubで長生きした資格情報を格納することを保持します.
ポストブートストラップライフ
このスタックを使用すると、信頼できるリポジトリからリンクされたAWSアカウントにAWS CDK V 2展開を出荷することができます.
あなたがしなければならないすべては、あなたのアカウントでGithub CI役割役割を仮定するためにGitHubアクションを指示して、1時間の一時的な資格を得るでしょう.
次のステップは
別のブートストラップを作成します.
フォローアップ
あなたがこのものに興味があるならば、あなたは好きかもしれませんmicroteams !
私は1つの人AWSのスタートアップからマルチチーム組織に成長しているスケールアップのために書いているガイド.
このガイドでは、AWSのアカウントにGithubアクションからAWSのCDKスタックの展開を自動化する安全な方法を提供します.
あなたのGitHubアカウントで長寿命の資格情報を保存する必要がないので、より安全です👍
動作方法
私たちはオープンID接続を利用し、Githubに一時的な同盟国を与えます.このアイデンティティはあなたのAWSアカウントの役割を仮定するために信頼されるでしょう.
アイデンティティ(GITHUB)が役割を仮定するとき、我々は2つのことをすることによってそれのアクセスを確保します:
セットアップ
そうすれば、
ブートストラップスタックの作成
新しいAWS CDKアプリケーションを作成できます.
mkdir bootstrap
npx [email protected] init app --language typescript
その後、IAMから2つのコンポーネントを使用してプロバイダーを作成し、プリンシパルを作成します.私たちは、AWSの間の信頼関係を作成するためにプリンシパルを使用するでしょう、そして、そのようにgithub.
/**
* Create an Identity provider for GitHub inside your AWS Account. This
* allows GitHub to present itself to AWS IAM and assume a role.
*/
const provider = new OpenIdConnectProvider(this, 'MyProvider', {
url: 'https://token.actions.githubusercontent.com',
clientIds: ['sts.amazonaws.com'],
});
そして、このプロバイダーが元本として行動するための条件を定義することで、信頼関係を確立する.私はあなたを仮定する例を提供しますhttps://github.com/simonireilly そして、あなたは素晴らしいプロジェクトと呼ばれる
const githubOrganisation = "simonireilly"
// Change this to the repo you want to push code from
const repoName = "awesome-project"
/**
* Create a principal for the OpenID; which can allow it to assume
* deployment roles.
*/
const GitHubPrincipal = new OpenIdConnectPrincipal(provider).withConditions(
{
StringLike: {
'token.actions.githubusercontent.com:sub':
`repo:${githubOrganisation}/${repoName}:*`,
},
}
);
最後に、OIDCプリンシパルによって想定できるロールを確立します.これによって、githubのアクションがAWSロールを使用し、AWSリソースを展開してアクセスできます./**
* Create a deployment role that has short lived credentials. The only
* principal that can assume this role is the GitHub Open ID provider.
*
* This role is granted authority to assume aws cdk roles; which are created
* by the aws cdk v2.
*/
new Role(this, 'GitHubActionsRole', {
assumedBy: GitHubPrincipal,
description:
'Role assumed by GitHubPrincipal for deploying from CI using aws cdk',
roleName: 'github-ci-role',
maxSessionDuration: Duration.hours(1),
inlinePolicies: {
CdkDeploymentPolicy: new PolicyDocument({
assignSids: true,
statements: [
new PolicyStatement({
effect: Effect.ALLOW,
actions: ['sts:AssumeRole'],
resources: [`arn:aws:iam::${this.account}:role/cdk-*`],
}),
],
}),
},
});
🚨 これらのアクセス許可はあなたのユースケースに対してあまりにも広いかもしれません.アクセス許可の境界を追加するか、CDKがその展開に自動的に作成したロール以外のロールを使用することを選択します🚨ブートストラップの配備
作成されたアクセスキーのセットを使用すると、ブートストラップを展開できます.これはあなたのチームのリンクを設定するより高い特権を持つ誰かを可能にします👍
これはGithubで長生きした資格情報を格納することを保持します.
name: Bootstrap
on:
workflow_dispatch:
inputs:
AWS_ACCESS_KEY_ID:
description: "Access Key ID with Permissions to deploy IAM, and OIDC"
required: true
AWS_SECRET_ACCESS_KEY:
description: "Secret Access Key with Permissions to deploy IAM, and OIDC"
required: true
AWS_REGION:
description: "Region to deploy to."
required: true
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Git clone the repository
uses: actions/checkout@v1
- name: Configure aws credentials
uses: aws-actions/configure-aws-credentials@master
with:
aws-access-key-id: ${{ github.event.inputs.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ github.event.inputs.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ github.event.inputs.AWS_REGION }}
- uses: actions/setup-node@v2
with:
node-version: "14"
- run: yarn install
- name: Synth stack
run: yarn --cwd packages/bootstrap cdk synth
- name: Deploy stack
run: yarn --cwd packages/bootstrap cdk deploy --require-approval never
このアクションをトリガーすると、ユーザーはAWSアクセスキーとAWS秘密を入力しなければなりません.ポストブートストラップライフ
このスタックを使用すると、信頼できるリポジトリからリンクされたAWSアカウントにAWS CDK V 2展開を出荷することができます.
あなたがしなければならないすべては、あなたのアカウントでGithub CI役割役割を仮定するためにGitHubアクションを指示して、1時間の一時的な資格を得るでしょう.
deploy-infrastructure:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Git clone the repository
uses: actions/checkout@v1
- name: Assume role using OIDC
uses: aws-actions/configure-aws-credentials@master
with:
role-to-assume: arn:aws:iam::<your-account-id-here>:role/github-ci-role
aws-region: ${{ env.AWS_REGION }}
- uses: actions/setup-node@v2
with:
node-version: "14"
- run: yarn install
- name: Synth infrastructure stack
run: yarn --cwd packages/infrastructure cdk synth
- name: Deploy infrastructure stack
run: yarn --cwd packages/infrastructure cdk deploy --require-approval never
次のステップは
別のブートストラップを作成します.
main
ブランチは、あなたが1つを持っている場合、あなたの生産👍{
StringLike: {
'token.actions.githubusercontent.com:sub':
`repo:${githubOrganisation}/${repository}:ref:/refs/head/main`,
},
}
フォローアップ
あなたがこのものに興味があるならば、あなたは好きかもしれませんmicroteams !
私は1つの人AWSのスタートアップからマルチチーム組織に成長しているスケールアップのために書いているガイド.
Reference
この問題について(Githubアクションによる安全なAWS - CDK展開), 我々は、より多くの情報をここで見つけました https://dev.to/simonireilly/secure-aws-cdk-deployments-with-github-actions-3jfkテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol