はじめに
アクセスキーを作成するとセキュリティが心配になりますよね。
数も増えると管理も大変になってしまいます。
そんな時は、「Secret Manager」を使いましょう!
今回は、CloudFormationでIAMユーザ作成→アクセスキー作成→Secret Managerに
保存まで自動化してみました。
テンプレート
AWSTemplateFormatVersion: 2010-09-09
Description: CreateIAMUser
Resources:
TestUser:
Type: AWS::IAM::User
Properties:
UserName: TestUser
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
AccessKey:
Type: AWS::IAM::AccessKey
Properties:
Status: Active
UserName: !Ref TestUser
AccessKeySecret:
Type: AWS::SecretsManager::Secret
Properties:
Name: !Sub ${TestUser}-credentials
SecretString: '{"accessKeyId": {"Ref": "AccessKey"},"secretAccessKey": {"Fn::GetAtt": ["AccessKey", "SecretAccessKey"]}}'
解説が入らない方はここまででも大丈夫です。作成されたリソースの確認をしてみてください。
「TestUser」の部分は適宜変えていただいて問題ございません。
以下からテンプレートについて解説していきます。
#cloudformationテンプレートのバージョンを指定します
AWSTemplateFormatVersion: 2010-09-09
#テンプレートの説明を任意で入れます
Description: CreateIAMUser
#リソースの定義をします
Resources:
#作成する任意のリソース名をいれます
TestUser:
#作成するリソースのタイプを指定します
Type: AWS::IAM::User
#このプロパティの項目に基づいてリソースの作成をしていきます
Properties:
#IAMユーザの名前を指定します
UserName: TestUser
#作成するIAMユーザにアタッチするポリシーを指定します
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
#作成するアクセスキーのリソース名です
AccessKey:
#作成するリソースのタイプを指定します
Type: AWS::IAM::AccessKey
#このプロパティに基づいてリソースの作成をしていきます
Properties:
#アクセスキーを有効な状態で作成します
Status: Active
#作成するアクセスキーと上記で作成したIAMユーザの関連付けをします
UserName: !Ref TestUser
#任意のシークレット名を指定します
AccessKeySecret:
#作成するリソースタイプの指定をします
Type: AWS::SecretsManager::Secret
#このプロパティに基づいてリソースの作成をしていきます
Properties:
#作成するシークレット名を指定します
Name: !Sub ${TestUser}-credentials
#作成したシークレットに格納する文字列を指定します。アクセスキーIDは指定した「Accesskey」(ポリシーの行の下)を参照し、
#シークレットアクセスキーはGetAtt使用して「AccessKey」リソースの「secretAccessKey」属性を取得します。
SecretString: '{"accessKeyId": {"Ref": "AccessKey"},"secretAccessKey": {"Fn::GetAtt": ["AccessKey", "SecretAccessKey"]}}'
参考にさせていただきました。
https://dev.classmethod.jp/articles/issuing-iam-access-keys-and-storing-them-in-secrets-manager-with-cloudformation/
お疲れ様でした。