[AWS](WA)ロールの作成を委任する IAM 権限境界

AWS

元ネタ

AWSのWell-Architected Frameworkを改めて整理。せっかくなんでハンズオン形式で学べるAWS Well-Architected Labsをやってみよう!ということで、備忘も兼ねて実践&記録をしてみました。

Workshop Studio
Discover and participate in AWS workshops and GameDays

前提条件

  • AWSアカウントがあること
  • AWS アカウントのロールを引き受けることができる、MFA が有効になっている IAM ユーザー。
    MFAはベストプラクティスとして有効にしてあるが、このハンズオンのためにはマストではないと思う。

ハンズオン開始

0. 概要

これは、開発者に対して制限(権限境界)を持たせたロール作成ポリシーを持つロールを与えるためのハンズオンです。これにより、制限(権限境界)を超えることなく、ロールとポリシーを作成するための権限を委任できます。
手順としては、制限(権限境界)を持たせたポリシー(今回はリージョンを制限する)を作成した後に、以下2つのポリシーが適用された開発者ロールを作成します。

  • createrole-restrict-region-boundary
    • 以下3つの権限が設定されています。(ポリシー、ロール共にapp1というプレフィックスが強制される)
      • ポリシーが作成、削除できる権限
      • 制限(権限境界)を設定したポリシーを含めたロールを作成できる権限
      • ロールにポリシーが適用できる権限
  • iam-restricted-list-read
    • IAMサービスに対してリスト及び読み取りが適用されたポリシーです。

この開発者ロールを使用して作成したロールが、リージョン制限によるエラーが発生するところまでを確認します。

1. 権限境界のポリシーを作成する

us-east-1 (北バージニア) および us-west-1 (北カリフォルニア) リージョンのみを許可した、権限境界のためのポリシーを作成します。

ポリシー作成手順

  1. IAMよりポリシーを開く。
  2. 「ポリシーの作成」をクリックし、「ポリシーエディタ」より「JSON」タブを選択する。
  3. 以下を貼り付ける。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EC2RestrictRegion",
            "Effect": "Allow",
            "Action": "ec2:*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": [
                        "us-east-1",
                        "us-west-1"
                    ]
                }
            }
        },
        {
            "Sid": "LambdaRestrictRegion",
            "Effect": "Allow",
            "Action": "lambda:*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": [
                        "us-east-1",
                        "us-west-1"
                    ]
                }
            }
        }
    ]
}
  1. 「次へ」を選択する。
  2. 「ポリシー名」にrestrict-region-boundaryと入力し、「ポリシーの作成」を選択する。

2. 開発者ロールに適用するポリシーを作成する

「1. 権限境界のポリシーを作成する」で作成したポリシーを持つロールが作成できるポリシーを作成します。また、名前付きプリフィックスも適用することで複数アプリケーションでの識別を容易にします。

ここで貼り付けるJSONにはアカウントID(12桁の数値)が含まれているため、置き換えてください。[アカウントID]の部分です。

ポリシー作成手順

  1. IAMよりポリシーを開く。
  2. 「ポリシーの作成」をクリックし、「ポリシーエディタ」より「JSON」タブを選択する。
  3. 以下を貼り付ける。([アカウントID]の部分を5ヶ所置き換えてください。)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CreatePolicy",
            "Effect": "Allow",
            "Action": [
                "iam:CreatePolicy",
                "iam:CreatePolicyVersion",
                "iam:DeletePolicyVersion"
            ],
            "Resource": "arn:aws:iam::[アカウントID]:policy/app1*"
        },
        {
            "Sid": "CreateRole",
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole"
            ],
            "Resource": "arn:aws:iam::[アカウントID]:role/app1*",
            "Condition": {
                "StringEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::[アカウントID]:policy/restrict-region-boundary"
                }
            }
        },
        {
            "Sid": "AttachDetachRolePolicy",
            "Effect": "Allow",
            "Action": [
                "iam:DetachRolePolicy",
                "iam:AttachRolePolicy"
            ],
            "Resource": "arn:aws:iam::[アカウントID]:role/app1*",
            "Condition": {
                "ArnEquals": {
                    "iam:PolicyARN": [
                        "arn:aws:iam::[アカウントID]:policy/*",
                        "arn:aws:iam::aws:policy/*"
                    ]
                }
            }
        }
    ]
}
  1. 「次へ」を選択する。
  2. 「ポリシー名」にcreaterole-restrict-region-boundaryと入力し、「ポリシーの作成」を選択する。

3. 開発IAMコンソールアクセスポリシーを作成する

このハンズオンの要件ではありませんが、確認のために、IAMサービスへのリスト及び読み取り権限を持つポリシーを作成します。

ポリシー作成手順

  1. IAMよりポリシーを開く。
  2. 「ポリシーの作成」をクリックし、「ポリシーエディタ」より「JSON」タブを選択する。
  3. 以下を貼り付ける。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Get",
            "Effect": "Allow",
            "Action": [
                "iam:ListPolicies",
                "iam:GetRole",
                "iam:GetPolicyVersion",
                "iam:ListRoleTags",
                "iam:GetPolicy",
                "iam:ListPolicyVersions",
                "iam:ListAttachedRolePolicies",
                "iam:ListRoles",
                "iam:ListRolePolicies",
                "iam:GetRolePolicy"
            ],
            "Resource": "*"
        }
    ]
}
  1. 「次へ」を選択する。
  2. 「ポリシー名」にiam-restricted-list-readと入力し、「ポリシーの作成」を選択する。

4. 開発者ロールの作成

権限境界と名前付けプレフィックスが適用された、ロールとポリシーを作成する権限を持つ開発者用のロールを作成します。

作成手順

  1. IAMよりロールを開く。
  2. 「ロールの作成」を選択する。
  3. 「信頼されたエンティティタイプ」で「AWS account」を選択する。
  4. 「AWSアカウント」で「別のアカウントID」を選択し、アカウントIDを入力する。
    オプションではベストプラクティスに従い、「MFAが必要」にチェックを入れる。
  5. 「次へ」を選択する。
  6. 「許可ポリシー」の検索枠に「createrole」を入力し、createrole-restrict-region-boundaryポリシーの横にあるチェックボックスをオンにする。
  7. 更に「許可ポリシー」の検索枠に「iam-res」を入力し、iam-restricted-list-readポリシーの横にあるチェックボックスをオンにして、「次へ」を選択する。
  8. 「ロールの詳細」の「ロール名」に「developer-restricted-iam」と入力し、「ロールを作成」を選択する。

5. 開発者ロールへの切り替え

開発者ロールにロールの切り替えを行います。

ロールの切り替え手順

  1. IAMのロールにてdeveloper-restricted-iamを検索し、詳細画面を開く。
  2. 「概要」の右側にある「コンソールでロールを切り替えるためのリンク」のリンクをコピーする。
  3. 右上のナビゲーションバーでユーザー名をクリックする。
  4. 2.でコピーしたリンクをブラウザに貼り付ける。
  5. 「ロールの切り替え」画面で、「アカウント」にアカウントID、「ロール」に「developer-restricted-iam」が入力されていることを確認し、「ロールの切り替え」を選択する。
  1. 右上のナビゲーションバーの名前の表示が「developer-restricted-iam@アカウントID」となっていることを確認する。

6. ユーザーロールの作成

開発者ロールのままで、制限(権限境界)付のユーザーロールを作成します。

ユーザーロールの作成手順

  1. 右上のナビゲーションバーの名前の表示が「developer-restricted-iam@アカウントID」となっていることを確認する。
  2. IAMコンソールを開く。(権限が制限されているため、複数のアクセス拒否が表示されるのが正しい。)
  3. 「ロール」より「ロールの作成」を選択する。
  4. 「信頼されたエンティティタイプ」で「AWS account」を選択する。
  5. 「AWSアカウント」で「別のアカウントID」を選択し、アカウントIDを入力する。
    オプションではベストプラクティスに従い、「MFAが必要」にチェックを入れる。
  6. 「次へ」を選択する。
  7. 「許可ポリシー」の検索枠に「EC2Full」と入力し、AmazonEC2FullAccessポリシーの横にあるチェックボックスをオンにする。
  8. 更に「許可ポリシー」の検索枠に「AWSLambda」を入力し、AWSLambda_FullAccessまたはAWSLambdaFullAccessポリシーの横にあるチェックボックスをオンにする。
  9. 「許可の境界を設定」にて「許可の境界を使用して、最大ロール許可を制御」を選択し、検索枠に「boundary」と入力し、「restrict-region-boundary」のラジオボタンを選択する。
  10. 「次へ」を選択する。
  11. 「ロールの詳細」の「ロール名」に「app1-user-region-restricted-services」を入力し、「ロールを作成」を選択する。

7. ユーザーロールへの切り替えと確認

ユーザーロールへロールの切り替えを行い、制限(権限境界)が有効であることを確認します。

ユーザーロールへの切り替え手順

  1. IAMのロールにてapp1-user-region-restricted-servicesを検索し、詳細画面を開く。
  2. 「概要」の右側にある「コンソールでロールを切り替えるためのリンク」のリンクをコピーする。
  3. 右上のナビゲーションバーでユーザー名をクリックする。
  4. 「スイッチバック」を選択する。これで元のユーザーに戻る。
  5. 2.でコピーしたリンクをブラウザに貼り付ける。
  6. 「ロールの切り替え」画面で、「アカウント」にアカウントID、「ロール」に「app1-user-region-restricted-services」が入力されていることを確認する。
  7. 更に「色」から「developer-restricted-iam」へのロール切り替え時と異なる色を選択する。
    選択しない場合、上書きされる。
  8. 「ロールの切り替え」を選択する。
  9. 右上のナビゲーションバーの名前の表示が「app1-user-region-restricted-services@アカウントID」となっていることを確認する。
  10. EC2管理コンソールに移動する。
  11. リージョン制限があることから、「リソース」にある「ロードバランサー」にてAPIエラーが発生することを確認する。
  1. 更に右上のナビゲーションバーにて、us-east-1、us-west-1以外のリージョンを選択した場合、更にAPIエラーが増えることを確認する。
  1. 11.、12.の結果より制限が有効であることが確認できる。

タイトルとURLをコピーしました