これまでの記事で、
- AWS Organizations
- IAM Identity Center
- Permission Set
まで構築しました。
今回は、ローカルPCからAWSを操作するために、AWS CLIをIAM Identity Center(AWS SSO)へ接続します。
これにより、長期アクセスキーを発行せず、安全にAWS CLIやTerraformを利用できるようになります。
なぜアクセスキーを使わないのか
以前はAWS CLIを利用する際、IAM Userを作成し、
- Access Key ID
- Secret Access Key
を発行していました。
IAM User
├── Access Key ID
└── Secret Access Key
しかし、この方法にはいくつかの課題があります。
- アクセスキーの漏洩リスク
- 定期的なローテーションが必要
- GitHub Secretsへ保存する必要がある
- 退職時の管理が煩雑
現在AWSでは、人によるAWSへのアクセスには**IAM Identity Center(旧AWS SSO)**を利用することが推奨されています。
参考
IAM Identity CenterとAWS CLIの仕組み
AWS CLIは、IAM Identity Centerへログインし、一時的な認証情報(Temporary Credentials)を取得します。
Developer PC
│
aws configure sso
│
▼
IAM Identity Center
│
▼
AdministratorAccess
│
▼
Dev Account
つまり、
- パスワードを保存しない
- Access Keyを保存しない
- 必要なときだけ一時認証情報を取得する
という、安全性の高い認証方式になります。
aws configure sso を実行
まずAWS CLI v2をインストールします。
インストール後、次のコマンドを実行します。
aws configure sso
すると、対話形式で設定が始まります。
SSO Session Name
SSO session name (Recommended):
ここはローカルPC上だけで利用する設定名です。
今回は
coiai
としました。
好きな名前で問題ありません。
SSO Start URL
SSO start URL
IAM Identity CenterのアクセスポータルURLを入力します。
例
https://d-xxxxxxxx.awsapps.com/start
このURLは
IAM Identity Center
→ Settings
から確認できます。
SSO Region
SSO region
IAM Identity Centerを有効化したリージョンを指定します。
今回は東京リージョンなので
ap-northeast-1
を指定しました。
Registration Scope
SSO registration scopes
デフォルトの
sso:account:access
をそのまま利用します。
通常は変更する必要はありません。
ブラウザ認証
途中でブラウザが自動的に起動し、
IAM Identity Centerへログインします。
認証が成功すると、
AWS CLIが利用可能なAWSアカウントを取得します。
今回は
The only AWS account available to you is:
120896952796
となりました。
さらに
AdministratorAccess
が利用可能なPermission Setとして表示されました。
リージョンと出力形式
続いて
Default client Region
では
ap-northeast-1
を指定しました。
また
CLI default output format
では
json
を選択しています。
JSONはTerraformやスクリプトとの相性が良いため、おすすめです。
Profile Name
最後に
CLI profile name
を設定します。
今回は
coiai-dev
という名前にしました。
この名前でAWS CLIが利用できます。
接続確認
最後に
aws sts get-caller-identity --profile coiai-dev
を実行しました。
結果は次の通りです。
{
"UserId": "AROAXXXXXXXXX:Hattori",
"Account": "120896952796",
"Arn": "arn:aws:sts::120896952796:assumed-role/AWSReservedSSO_AdministratorAccess_xxxxxxxxx/Hattori"
}
ここで重要なのは
assumed-role/AWSReservedSSO_AdministratorAccess
という部分です。
これは、IAM Userではなく、IAM Identity CenterのPermission Setから発行されたIAMロールを引き受けて認証されていることを意味します。
つまり、長期アクセスキーを一切利用せずにAWS CLIへログインできています。
Terraformでもそのまま利用できる
Terraformでは、このプロファイルを指定するだけで利用できます。
provider "aws" {
profile = "coiai-dev"
region = "ap-northeast-1"
}
CLIとTerraformが同じ認証情報を利用するため、アクセスキーをコードへ記述する必要がありません。
今後の構成
ここまでで、人によるAWSアクセスの認証基盤が完成しました。
今後は
Developer
│
IAM Identity Center
│
AWS CLI
│
Terraform
│
Dev Account
という流れでインフラをコード管理していきます。
その後はGitHub ActionsとOIDCを連携し、人だけでなくCI/CDも安全に認証できる環境を構築する予定です。
まとめ
IAM Identity CenterとAWS CLIを連携することで、
- Access Keyを発行しない
- 一時認証情報を利用する
- Terraformとも安全に連携できる
- AWSが推奨する認証方式を採用できる
という構成を実現できました。
AWS Organizations、IAM Identity Center、AWS CLIの3つが揃ったことで、今後はTerraformを中心としたInfrastructure as Codeの環境を構築していきます。



