0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

信頼ポリシーのつかいかた(AssumeRole)

Posted at

みなさんは、信頼ポリシーを活用したことはありますか?
IAMロール作成時などに見たことある方もいるかもしれません。

image.png

そもそもIAMロールって?

「ロール」=「権限」

  • 「AWS では、すべてのリソース操作は IAM ポリシーによって評価され、明示的に許可されていない操作はデフォルトで拒否される。そのため、AWS の各サービスを利用するには、IAM ポリシーで必要な権限が付与されている必要がある。」
  • 「EC2インスタンスを起動する」「S3バケットにファイルを置く」などの全ての操作に必要なもの
  • サービスなどに紐づけて使用する
  • ロールは ポリシー を集めたセット

→ 権限がなければ何も操作できません!権限を与えられることで初めてうごかすことができます!


私が信頼ポリシーに触れたきっかけは、EC2の稼働状況をSlackへ通知するアプリを作成する必要があったからでした。
(完成形↓)

image.png

このアプリを構築するにあたり、複数のAWSアカウントにあるEC2の稼働状況を見に行く必要がありました。

slackEC2停止_Qiita用.png

ここで必要になったのが、sts:AssumeRoleです!
「Assume」=「引き継ぐ」
=>別のAWSアカウントのロール(権限)を一時的に引き継いで、使用することができます!


Assumeしてリソース処理するまでには、3つのポリシーが必要です。
①:"Account Y"のロールを使いたい(引き継ぎたい)と言うポリシー(許可ポリシー)
②:"Account X"が自分(ロール)を使っていいよ(引き継いでいいよ)と言うポリシー(信頼ポリシー
③:リソースの操作ができるようになるポリシー(許可ポリシー)


①と②はこんなイメージです↓
image.png

まず①では、Account X側で許可ポリシーを作成します。
ここでは「Account Yの××ロールを引き継ぎたい」という内容を書いておきます。

Account X 許可ポリシー
{
      "Effect": "Allow",
      "Action": [
          "sts:AssumeRole"
      ],
      "Resource": [
          "arn:aws:iam::<Account_Y>:role/<××Role>"
      ]
}

これに対し②では、信頼ポリシーに「Account Xがこの××ロールを引き継いでもよいよ」という内容を書きます。

Account Y ××ロールの信頼ポリシー
{
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::<Account_X>:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
}

これにより、Account XがAccount Yの××ロールを一時的に使用することができます!
(↑図にて、Lambdaがヘルメット(××ロール)を被った状態)


あとは③で、××ロールにEC2情報を見るための許可ポリシーを設定すれば…

Account Y ××ロールの許可ポリシー
       {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::30days-s3notify"
            ]
        }

一時的な認証情報を受け取ることができました🎉
image.png


実際に構築していたところ、
[ERROR] ClientError: An error occurred (AccessDenied) when calling the AssumeRole operation:
とたくさん怒られました。

もしそうなってしまっても、
①:ロールを使いたい(引き継ぎたい)と言う 許可ポリシー
②:自分(ロール)を使っていいよ(引き継いでいいよ)と言う 信頼ポリシー
③:リソースの操作に必要な 許可ポリシー
+AssumuRoleコマンド実行時のロール名(shellやLambdaコード内)

を押さえておけばほぼ解決できるので、焦らずこまめに確認することをおすすめします、!

余談

信頼ポリシーでは、ワイルドカード(*)のような極端な許可を設定することができません。
引き継いで使用する側のアカウントなどはある程度指定する必要がありました。

image.png


以上、お付き合いいただきありがとうございました!
参考になれば幸いです!

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?