CircleCI 用 OIDC を設定 | AWS OIDC
アクセスキーを使用せずに AWS CDK をデプロイするために OIDC プロバイダーを使用します。
Step 1. Identity providers を作成
- IAM > Identity providers ( ID プロバイダ) > Add provider
- 以下を入力:
- Provider type: OpenID Connect
- Provider URL:
https://oidc.circleci.com/org/ - Audience: ``
- Add provider をクリック
Step 2. IAM ロールを作成
ロール名:ExsampleDeployRole
- IAM > Roles > Create role
- Trusted entity type: Web Identity を選択
- 以下を入力:
- Identity provider:
oidc.circleci.com/org/ - Audience: ``
- Identity provider:
- Next
- 権限を設定して作成
権限
CDK v2 の標準ブートストラップ(cdk bootstrap)済みの環境では、CI のロールに必要なのは cdk-* のブートストラップロール(deploy / file-publishing / image-publishing / lookup)への sts:AssumeRole です。実際のデプロイ処理(CloudFormation 操作など)はブートストラップロール側の権限で実行されるため、CloudFormationFullAccess や IAMFullAccess を CI ロールに付与する必要はありません。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::123456789012:role/cdk-*"
}
]
}
※ cdk bootstrap 自体は CloudFormation / IAM / S3 / ECR / SSM などの権限が必要なため、管理者権限で別途実行します。
※ 動作確認の段階で一時的に AdministratorAccess を付与し、その後に上記のように絞り込む方法もありますが、AdministratorAccess のまま運用しないでください。
Trust policy で project を絞り込む
ウィザードで作成した trust policy は aud の条件のみで、CircleCI Organization 内のすべての project からこのロールを引き受けられます。作成後に Trust relationships を編集し、sub 条件で対象の project を絞ってください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.circleci.com/org/"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.circleci.com/org/:aud": ""
},
"StringLike": {
"oidc.circleci.com/org/:sub": "org//project//user/*"
}
}
}
]
}
Step 3. CircleCI の環境変数に以下を追加
| Name | Value |
|---|---|
| AWS_ROLE_ARN | arn:aws:iam::123456789012:role/ExsampleDeployRole |
| AWS_ROLE_SESSION_NAME | circleci-cdk-deploy |
※ 123456789012 は AWS アカウント ID のダミーです。実際の値に置き換えてください。