0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[備忘録]AWS Access Portal 経由で Terraform を実行するための接続フロー

0
Posted at

AWS Access Portal 経由で Terraform を実行するための接続フロー

目的

AWS Access Portal / IAM Identity Center 経由で取得した認証情報を使い、ローカル環境から Terraform を実行できるようにする。

この手順では、長期の Access Key / Secret Access Key を直接発行せず、AWS CLI の SSO プロファイルを利用する。


前提

  • AWS Access Portal にログインできること
  • Terraform を実行する対象の AWS アカウントが Access Portal に表示されていること
  • Terraform 実行に必要な Permission Set / Role が割り当てられていること
  • ローカルに AWS CLI v2 がインストールされていること
  • ローカルに Terraform がインストールされていること

1. AWS CLI の確認

aws --version

AWS CLI v2 が入っていることを確認する。

例:

aws-cli/2.x.x Python/3.x.x Linux/x86_64

2. SSO プロファイルの作成

AWS Access Portal 経由で利用するための SSO プロファイルを作成する。

aws configure sso

入力例:

SSO session name: pj-name
SSO start URL: https://xxxxxxxx.awsapps.com/start
SSO region: ap-northeast-1
AWS account: 対象のAWSアカウント
AWS role: Terraform用のPermission Set / Role
CLI default client Region: ap-northeast-1
CLI default output format: json
CLI profile name: pj-name

この手順により、~/.aws/config に SSO 用の profile が作成される。


3. SSO ログイン

作成した profile を使ってログインする。

aws sso login --profile pj-name

ブラウザが開き、AWS Access Portal の認証画面が表示される。
認証が完了すると、ローカルに一時的な認証情報がキャッシュされる。


4. AWS 接続確認

以下のコマンドで、AWS CLI が対象アカウントへ接続できることを確認する。

aws sts get-caller-identity --profile pj-name

正常な場合、以下のような情報が返る。

{
  "UserId": "...",
  "Account": "123456789012",
  "Arn": "arn:aws:sts::123456789012:assumed-role/..."
}

この確認が通れば、AWS CLI 側の認証は成功している。


5. Terraform で profile を使う

Terraform コマンド実行時にも、同じ profile を明示する。

AWS_PROFILE=pj-name terraform init
AWS_PROFILE=pj-name terraform validate
AWS_PROFILE=pj-name terraform plan

毎回 AWS_PROFILE=pj-name を付けるのが面倒な場合は、現在のシェルで環境変数として設定する。

export AWS_PROFILE=pj-name

設定後は、以下のように profile 指定なしで実行できる。

aws sts get-caller-identity
terraform init
terraform validate
terraform plan

確認:

echo $AWS_PROFILE

以下のように表示されれば OK。

pj-name

6. Terraform 初期化

Terraform の対象ディレクトリへ移動する。

例:

cd ~/infra-aws/terraform/

初期化する。

terraform init

正常な場合:

Terraform has been successfully initialized!

と表示される。


7. Terraform plan の実行

terraform plan

8. plan 結果で確認するポイント

terraform plan の結果では、以下の行を必ず確認する。

Plan: X to add, Y to change, Z to destroy.

確認ポイント:

  • to add: 新規作成されるリソース数
  • to change: 変更されるリソース数
  • to destroy: 削除されるリソース数

特に to destroy0 以外の場合は要注意。
既存リソースが削除される可能性があるため、内容を確認してから進める。

例:比較的安全

Plan: 5 to add, 2 to change, 0 to destroy.

例:要確認

Plan: 1 to add, 3 to change, 2 to destroy.

9. plan を保存して apply する場合

確認した plan と同じ内容を apply したい場合は、plan をファイルに保存する。

terraform plan -out=tfplan

問題なければ apply する。

terraform apply tfplan

-out を付けずに terraform plan した場合、次に terraform apply を実行した時点で再度 plan が作られるため、完全に同じ内容が適用される保証はない。


10. よくあるエラー

No valid credential sources found

エラー例:

Error: No valid credential sources found
Error: failed to refresh cached credentials, no EC2 IMDS role found

原因:

Terraform 実行時に AWS profile が指定されていない。

例:

AWS_PROFILE=pj-name terraform init
terraform plan

この場合、init だけ profile 付きで実行され、plan では profile が指定されていない。

対応:

AWS_PROFILE=pj-name terraform plan

または:

export AWS_PROFILE=pj-name
terraform plan

SSO セッション切れ

SSO の一時認証情報が期限切れになると、Terraform や AWS CLI の実行に失敗する。

対応:

aws sso login --profile pj-name

再ログイン後、再度 Terraform を実行する。


Deprecated attribute / Argument is deprecated

警告例:

Warning: Deprecated attribute
Warning: Argument is deprecated

意味:

現在の Terraform AWS Provider では古い書き方になっている設定がある。

これは直ちに plan 失敗の原因ではないが、今後の provider 更新で問題になる可能性があるため、別途修正対象とする。


11. 今回確認できたこと

今回の環境では、以下まで確認済み。

aws sts get-caller-identity --profile pj-name

が成功。

その後、以下も成功。

AWS_PROFILE=pj-name terraform init
AWS_PROFILE=pj-name terraform plan

つまり、AWS Access Portal / IAM Identity Center 経由で Terraform から AWS へ接続するフローは成立している。


12. 基本コマンドまとめ

毎回 profile を付ける場合:

aws sso login --profile pj-name
aws sts get-caller-identity --profile pj-name
AWS_PROFILE=pj-name terraform init
AWS_PROFILE=pj-name terraform validate
AWS_PROFILE=pj-name terraform plan
AWS_PROFILE=pj-name terraform plan -out=tfplan
AWS_PROFILE=pj-name terraform apply tfplan

シェルに profile を設定する場合:

export AWS_PROFILE=pj-name

aws sso login
aws sts get-caller-identity
terraform init
terraform validate
terraform plan
terraform plan -out=tfplan
terraform apply tfplan

補足

Terraform 用途では、長期の Access Key / Secret Access Key を発行しなくても、AWS Access Portal / IAM Identity Center の SSO 認証で実行できる。

長期アクセスキーは漏洩時のリスクが高いため、基本的には SSO 経由の一時認証情報を利用する方が安全。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?