はじめに
AWS CLIを利用して、GitHub ActionsのOIDCプロバイダとIAMロールを構築する。
スクリプト
-
OIDCプロバイダを作成する
# OIDC Provider 作成 OIDC_NAME=token.actions.githubusercontent.com THUMBPRINT=6938fd4d98bab03faadb97b34396831e3780aea1 aws iam create-open-id-connect-provider \ --url https://${OIDC_NAME} \ --client-id-list sts.amazonaws.com \ --thumbprint-list ${THUMBPRINT}
-
IAMロールを作成する
# GitHub Actions Role 作成 REPOGITORY_NAME=${リポジトリ名} ROLE_NAME=role-github-actions-infra OIDC_ARN=$(aws iam list-open-id-connect-providers \ --query "OpenIDConnectProviderList[*].Arn" \ --output text | grep ${OIDC_NAME} ) ROLE_POLICY=$(echo -n '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "'; echo -n "${OIDC_ARN}"; echo -n '" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "'; echo -n "${OIDC_NAME}"; echo -n ':aud": "sts.amazonaws.com" }, "StringLike": { "'; echo -n "${OIDC_NAME}"; echo -n ':sub": "repo:'; echo -n "${REPOGITORY_NAME}"; echo -n '*" } } } ] }') aws iam create-role \ --role-name ${ROLE_NAME} \ --assume-role-policy-document "${ROLE_POLICY}" aws iam attach-role-policy \ --role-name ${ROLE_NAME} \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
クリーンアップ
-
ポリシーをロールからデタッチする
ROLE_NAME=role-github-actions-infra aws iam detach-role-policy \ --role-name ${ROLE_NAME} \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
-
IAMロールを削除する
ROLE_NAME=role-github-actions-infra aws iam delete-role \ --role-name ${ROLE_NAME}
-
OIDCプロバイダを削除する
OIDC_ARN=$(aws iam list-open-id-connect-providers \ --query "OpenIDConnectProviderList[*].Arn" \ --output text | grep ${OIDC_NAME} ) aws iam delete-open-id-connect-provider \ --open-id-connect-provider-arne ${OIDC_ARN}