💭
AWS CloudFormation - OIDCProviderのRole設定
CloudFormationでCodeCommitリポジトリ作成からOIDCProviderのRole設定までを行う。
概要
ここを参考に
手動でポチポチだと何気に手間なのと、別環境に作って貰う必要がありそうだったので
CloudFormationで行えるように。
- CodeCommitにGitHubから受信する為のブランチを作成
- IAMにロールを作成
- IAMにOIDCプロバイダを作成
- 作成したロールにポリシーを作成
- 結果出力にロールとリポジトリのARN、リポジトリのクローンURLを出力
パラメータ
- CreateRoleName : 作成するロールの名前を設定
- GitHubClientId : GitHubのクライアントIDを設定
- GitHubOrg : GitHubのオーナーを設定
- GitHubRepositoryName : GitHubのリポジトリを設定
- OIDCThumbprintID : IDプロバイダのサムプリントを設定
- OIDCProviderArn : IDプロバイダのARNを設定
GitHubClientId、OIDCThumbprintIDは当分変更される事は無いだろうけど、渡せるように。
テンプレート
AWSTemplateFormatVersion: 2010-09-09
Description: CreateGitHubCodeCommitAccessTestRole
Parameters:
CreateRoleName:
Description: Name of the role to create.
Default: "CreateGitHubCodeCommitAccessTestRole"
Type: String
GithubClientId:
Description: GitHub client ID.
Default: sts.amazonaws.com
Type: String
GitHubOrg:
Description: GitHub Owner.
Type: String
GitHubRepositoryName:
Description: GitHub Repository Name.
Type: String
OIDCThumbprintID:
Description: Thumbprint ID for the GitHub OIDC Provider.
Default: "6938fd4d98bab03faadb97b34396831e3780aea1"
Type: String
OIDCProviderArn:
Description: Arn for the GitHub OIDC Provider.
Default: ""
Type: String
# 条件
# OIDCProviderArn が 空白の場合に OIDCProvider リソース作成(CreateOIDCProvider)を行う。
#
Conditions:
CreateOIDCProvider: !Equals
- !Ref OIDCProviderArn
- ""
# リソース
# Repository 作成
# Role 作成
# Policy 作成
# OIDCProvider 作成
#
Resources:
Repository:
Type: AWS::CodeCommit::Repository
Properties:
RepositoryName: !Sub ${GitHubRepositoryName}
RepositoryDescription: GitHub CodeCommit Test Repository
Tags:
- Key: Created
Value: CloudFormation
- Key: Name
Value: !Sub ${GitHubRepositoryName}
- Key: Outline
Value: For push testing from GitHub
Role:
Type: AWS::IAM::Role
Properties:
RoleName: GitHubCodeCommitAccessTestRole
Description: GitHub CodeCommit Access Test Role
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Action: sts:AssumeRoleWithWebIdentity
Principal:
Federated: !If
- CreateOIDCProvider
- !Ref GithubOidc
- !Ref OIDCProviderArn
Condition:
StringEquals:
token.actions.githubusercontent.com:aud:
!Sub ${GithubClientId}
StringLike:
token.actions.githubusercontent.com:sub:
!Sub 'repo:${GitHubOrg}/${GitHubRepositoryName}:ref:refs/heads/main'
Tags:
- Key: "Created"
Value: "CloudFormation"
- Key: "Name"
Value: GitHubCodeCommitAccessTestRole
- Key: "Outline"
Value: "GitHub Access CodeCommit Role"
Policy:
Type: 'AWS::IAM::Policy'
Properties:
PolicyName: GitHubCodeCommitAccessTestPolicy
Roles:
- !Ref Role
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- codecommit:GitPush
Resource:
- !GetAtt Repository.Arn
# OIDCProvider の作成
# サムプリントIDについては下記のユーザーガイドを参照
# https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_providers_create_oidc_verify-thumbprint.html
#
GithubOidc:
Type: AWS::IAM::OIDCProvider
Condition: CreateOIDCProvider
Properties:
Url: 'https://token.actions.githubusercontent.com'
ClientIdList:
- !Sub ${GithubClientId}
ThumbprintList:
- !Sub ${OIDCThumbprintID}
Tags:
- Key: "Created"
Value: "CloudFormation"
- Key: "Name"
Value: GitHubOIDCProvider
- Key: "Outline"
Value: "GitHub Access OIDC Provider"
Outputs:
RoleArn:
Value: !GetAtt Role.Arn
RepositoryArn:
Value: !GetAtt Repository.Arn
RepositoryCloneUrlHttp:
Value: !GetAtt Repository.CloneUrlHttp
Discussion