AWS IAM Policy はインラインでなく、管理ポリシーを積極的に使おう

概要

IAM Policy で、管理ポリシーとインラインポリシーってどういう違いがあって、どっちを使うべきなのだろう?と調べてみました。

結論、インラインポリシーを控え、管理ポリシーを積極的に使おう

管理ポリシーとインラインポリシー

上記リンクの AWS ドキュメントの 「管理ポリシーとインラインポリシーの比較」 項目を見ると、管理ポリシーを利用するメリットが明らかです。

インラインポリシーではなく、管理ポリシーを使用することをお勧めします。

管理ポリシーは次の機能を備えています。

  • 再利用可能性
  • 一元化された変更管理
  • バージョニングとロールバック
  • アクセス許可管理の委任
  • AWS 管理ポリシーの自動更新

terraform の気持ちになってみる

terraform の気持ちになって必要なリソースを考えると以下の様になります。

  • 管理ポリシー

    • aws_iam_policy
    • aws_iam_user_policy_attachment
  • インラインポリシー

    • aws_iam_user_policy

例) 管理ポリシー

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# IAM User
resource "aws_iam_user" "hoge" {
name = "hoge"
path = "/"
}

# 管理ポリシー
resource "aws_iam_policy" "hoge" {
name = "hoge"
policy = data.aws_iam_policy_document.hoge.json
}

# ポリシー
data "aws_iam_policy_document" "hoge" {
statement {
...
}
}

# ポリシーを IAM User にアタッチ
resource "aws_iam_user_policy_attachment" "hoge" {
user = aws_iam_user.hoge.name
policy_arn = aws_iam_policy.hoge.arn
}

例) インラインポリシー

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# IAM User
resource "aws_iam_user" "hoge" {
name = "hoge"
path = "/"
}

# ポリシー
data "aws_iam_policy_document" "hoge" {
statement {
...
}
}

# インラインポリシーとして IAM User にポリシーをアタッチ
resource "aws_iam_user_policy" "hoge" {
name = "hoge"
user = aws_iam_user.hoge.name
policy = data.aws_iam_policy_document.hoge.json
}

まとめ

terraform プロジェクトをレビューする機会がある折には、 aws_iam_user_policy を見つけたら是非、目を細めて「管理ポリシーの優位性が…」云々を語り、AWS のドキュメントをリンクを貼ってみてください。

以上
参考になれば幸いです。

AWS IAM Policy はインラインでなく、管理ポリシーを積極的に使おう

https://kenzo0107.github.io/2020/07/01/2020-07-02-aws-iam-policy-managed-or-inline/

Author

Kenzo Tanaka

Posted on

2020-07-02

Updated on

2020-07-29

Licensed under

コメント