質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Terraform

Terraformは、インフラ構築のためのツールです。AWS/DigitalOcean/GoogleCloudといった様々なインフラに対応。インフラ構成のコード管理や変更の作業などの手間を自動化し、インフラ構築の効率化を図ることができます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1600閲覧

terraformでシークレットキーを直接参照したい

Nero1129

総合スコア130

Terraform

Terraformは、インフラ構築のためのツールです。AWS/DigitalOcean/GoogleCloudといった様々なインフラに対応。インフラ構成のコード管理や変更の作業などの手間を自動化し、インフラ構築の効率化を図ることができます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/05/11 06:25

前提

Terraformでiamユーザーを作成し、アクセスキーを発行させ、その値をparameter storeに保存したいです

実現したいこと

具体的に説明すると、ECSで立てたコンテナからs3へのアクセスするためのキーを発行したいのですが、手動で作成してアクセスキーをparameter storeに保存するとかせず、出来る限り、機密情報の取扱などを考えなくても済むよう、Terraformで一元管理をしたいと思っております。

TerraformでのIAMユーザーの作成、アクセスキー発行まではできました。
しかし、他のリソースから、アクセスキーの参照ができなくて困っております。
他のリソースから参照する方法が知りたいです。

例えば、local-execみたいなもので、outputを参照して、variableに代入するとか…
Terraform上で変数に代入して、参照させる方法とかあれば知りたいです。
一通り調べたのですが、よくわかりませんでした。

発生している問題・エラーメッセージ

shell

12│ Error: Missing required argument 34│ with aws_ssm_parameter.system_user_access_id, 5│ on aws_ssm.tf line 25, in resource "aws_ssm_parameter" "system_user_access_id": 625: value = "${aws_iam_access_key.system_user_access_key.encrypted_secret}" 78│ The argument "value" is required, but no definition was found. 9

となってしまい、アクセスができません。
理由としては、
https://github.com/hashicorp/terraform-provider-aws/issues/780
仕様で敢えて、アクセスさせないようにするため?らしいです。
(余談:どのみち、gpgなどで暗号化しない限りはtfstateには直書きされてるので、こんな悪あがきをするくらいなら、普通にtfstateごと暗号化したりするなどしたほうがいいと思うのですがね…)

アクセスキー発行時は暗号化などはせずに、そのまま作成させてます。

terraform

1#============================================================ 2# ユーザー作成 3#============================================================ 4resource "aws_iam_user" "system_user" { 5 name = "${var.project_name}-user-test" 6} 7 8resource "aws_iam_user_login_profile" "system_user_profile" { 9 user = aws_iam_user.system_user.name 10 password_reset_required = false 11 depends_on = [aws_iam_user.system_user] 12} 13 14#============================================================ 15# アクセスキー作成 16#============================================================ 17resource "aws_iam_access_key" "system_user_access_key" { 18 user = aws_iam_user.system_user.name 19}

試したこと

  • outputして、出力された値をどうにか参照しようと試行しましたができませんでした。
  • python等スクリプトを組んで、local-execで実行しよか迷いましたが、そもそもスマートじゃないと思いやめました。

補足情報(FW/ツールのバージョンなど)

shell

1/terraform # terraform -v 2Terraform v1.1.9 3on linux_amd64 4+ provider registry.terraform.io/hashicorp/aws v4.13.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この質問で問われている方法に対する直接的な回答ではないですが、そもそもそのような用途でアクセスキーを使うのが間違っています。

ECSで立てたコンテナからs3へのアクセスするためのキーを発行したい

その用途でアクセスキーを使うのはやめて、素直にIAMロールを使ってください。
AWS内部からのAWSリソースのアクセスは原則としてIAMロールを使用し、IAMアクセスキーの利用は外部からのアクセスに必要な場合に最小限に留めるのがベストプラクティスです。
むやみにアクセスキーを発行するのは推奨されません。

ロールを使用してアクセス許可を委任する

投稿2022/05/11 07:17

yu_1985

総合スコア7447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nero1129

2022/05/11 07:26

言わんとすることは理解しており、もともと、同じようにECSTask自体にS3へのアクセスRoleを設定したのですが、コンテナからs3へのアクセスができませんでした。 コンテナの中身はpythonでboto3経由でS3をread,writeするだけのプログラムです。 試しに、`aws s3 ls`を実行すると、 ``` shell 2022-05-11 16:21:36Unable to locate credentials. You can configure credentials by running "aws configure". ``` となってしまい、直接Access keyの参照を求められてしまいます。
yu_1985

2022/05/11 07:32

それはどちらかというとそちらのトラブルシュートが必要で、解決策としてアクセスキーを発行しまくるのはよくないです。 プログラム側の記載に問題があるのか、ロールの設定の仕方に問題があるのか切り分けてください。 よくあるミスとしては、タスクロールとタスク実行ロールの混同があります https://dev.classmethod.jp/articles/ecs_fargate_iamrole/ https://dev.classmethod.jp/articles/ecs_ec2_iamrole/
Nero1129

2022/05/11 08:59

問題がわかりました。 タスク実行ロールは設定していましたが、タスクロールの設定を行なっていなかったためでした。 トークンに関しては、起動時に勝手にコンテナのenvにAWS_CONTAINER_CREDENTIALS_RELATIVE_URIが付与されなかったので、毎度発行する必要があるのかと勘違いしていただけでした。タスクロールを付与したらAWS_CONTAINER_CREDENTIALS_RELATIVE_URIも付与されたので助かりました。 ありがとうございました。ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問