Amazon Web Services ブログ

AWS IAM Identity Center における許可セットの管理とアカウント割り当ての委任

このブログ記事では、AWS IAM Identity Center(AWS Single Sign-On の後継)を使用して、許可セットとアカウント割り当ての管理を委任する方法をご紹介します。日々のユーザーと権限の管理を委任することで、チームはより速く動き、中央集権的なアイデンティティ管理者の負担を軽減できます。

IAM Identity Centerは、安全にWorkforce Identityを作成または接続し、AWSアカウントとアプリケーションに渡るアクセスを一元的に管理することに役立ちます。Identity Centerでは、AWS Organizationsによってマルチアカウントが管理されている必要があります。Identity Centerの管理は、メンバーアカウント(管理アカウント以外のアカウント)に委任できます。管理アカウントにアクセスできる人を制限し、管理アカウントの利用は管理アカウントが必要なタスクに限って使用することをおすすめします。

委任された管理は、このブログで取り上げている許可セットとアカウント割り当ての委任とは異なります。AWS IAM Identity Centerの委任管理についての詳細は、「AWS IAM Identity Center委任管理の導入」をご覧ください。このブログポストで説明する手法は、Identity Centerがメンバーアカウントに委任されているか、または管理アカウントに残っているかに関係なく機能します。

許可セットは、AWSアカウントに対するユーザーまたはグループのアクセスレベルを定義するために使用されます。許可セットには、AWS管理ポリシーカスタマー管理ポリシーインラインポリシー、およびアクセス許可境界が含まれる可能性があります。

ソリューションの概要

組織が成長するにつれて、許可管理とアカウント割り当ての権限をチームに委任して、チームの自律性を高め負担を減らすことを検討したいと考えるかもしれません。または、自分たちの組織単位(OU)で運用している様々な社内ビジネスユニットや社外のユーザーが、自分たちのアイデンティティ管理をよりコントロールしたいと考えるかもしれません。

このシナリオでは、例として3つの開発チーム(レッド、ブルー、イエロー)を持つある組織を仮定します。各チームはそれぞれ自分たちのOUを運用しています。IAM Identity Centerは管理アカウントから管理用メンバーアカウントに委任されています。図1はこの例の組織構成を示しています。

図1:本ブログで仮定するシナリオの組織構造

このシナリオの組織には既にある許可セットのコレクションがあります。中央集権的なアイデンティティ管理チームから許可セットとアカウント割り当ての管理を委任したいと考えています。

  • レッドチームは、自分たちのOU内のアカウントに既存の許可セットを割り当てることができるようにしたいと考えています。これはアカウントベースのモデルです。
  • ブルーチームは、単一の許可セットを編集・使用し、その許可セットをチームの単一アカウントに割り当てたいと考えています。これは許可ベースのモデルです。
  • イエローチームは、「Team: Yellow」とタグ付けされた許可セットを作成、編集、使用し、その許可セットを自分たちの組織単位内の全アカウントに割り当てたいと考えています。これはタグベースのモデルです。

これら3つのユースケースの必要な許可セットを見ていきます。

注意: AWS Management Console を使用している場合は、追加の許可が必要です。

ユースケース 1: アカウントベースのモデル

このユースケースでは、レッドチームに対してOU内の3つのアカウントに既存の許可セットを割り当てる許可が与えられます。これにはアカウント割り当ての削除許可も含まれます。

このモデルを使用すると、組織は一般的な許可セットを作成し、AWSアカウントに割り当てることができます。これにより、管理者の複雑性が軽減され、組織のベストプラクティスに従う許可セットの使用状況が確認しやすくなります。これらの許可セットは、特定のリソースではなく、サービスと機能をベースにアクセスを制限します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sso:CreateAccountAssignment",
        "sso:DeleteAccountAssignment",
        "sso:ProvisionPermissionSet"
      ],
      "Resource": [
        "arn:aws:sso:::instance/ssoins-<sso-ins-id>",
        "arn:aws:sso:::permissionSet/ssoins-<sso-ins-id>/*",
        "arn:aws:sso:::account/112233445566",
        "arn:aws:sso:::account/223344556677",
        "arn:aws:sso:::account/334455667788"
      ]
    }
  ]
}

上記のポリシーでは、プリンシパルはAWSアカウントIDが112233445566、223344556677、334455667788の3つのAWSアカウントに既存の許可セットを割り当てることができます。このポリシーには管理者向けの許可セットが含まれるため、どのアカウントに許可セットの割り当てるか十分に検討してください。

arn:aws:sso:::instance/ssoins-<sso-ins-id>はIAM Identity Center におけるインスタンスID の ARNです。AWSコマンドラインインターフェイス(AWS CLI) v2  list-instances APIまたはAWS管理コンソールを使用して以下のように確認できます。

AWS CLI の使用

AWS コマンドラインインターフェイス (AWS CLI) を使用して以下のコマンドを実行してください:

aws sso-admin list-instances

AWS CloudShell を使用してコマンドを実行することもできます。

AWS マネジメントコンソールの使用

ご利用の AWS リージョンの管理コンソールを使用して、IAM Identity Center に移動し、ダッシュボード上のアイデンティティソースの確認を選択してください。

図2: コンソール上のIAM Identity Center インスタンス ID ARN

ユースケース 2: 権限ベースのモデル

この例では、ブルーチームは1つまたは複数の特定の許可セットを編集する許可を与えられ、それらの許可セットを1つのアカウントに割り当てることができます。以下の許可は、チームがAWS管理ポリシー、カスタマー管理ポリシー、インラインポリシーを使用できるようにします。

このモデルでは、委任管理者が特定のAWSアカウント上のきめ細かなアクセス許可を使用できます。チームがAWSアカウント内へのアクセス許可を完全に管理したい場合、および管理ロールを作成する能力を持ちたい場合に有用です。このような場合、アカウントを操作するチームの方がサービスとワークロードの理解が深いため、アクセス許可は通常管理者よりもチームの方が実施しやすくなります。

アクセス許可の完全なコントロール権限を与えることは、意図しないまたは望ましくない結果につながる可能性があります。許可セットはIAMの評価と認証の対象であるため、サービスコントロールポリシー(SCP)により特定のアクションを拒否することができます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "sso:AttachCustomerManagedPolicyReferenceToPermissionSet",
            "sso:AttachManagedPolicyToPermissionSet",
            "sso:CreateAccountAssignment",
            "sso:DeleteAccountAssignment",
            "sso:DeleteInlinePolicyFromPermissionSet",
            "sso:DetachCustomerManagedPolicyReferenceFromPermissionSet",
            "sso:DetachManagedPolicyFromPermissionSet",
            "sso:ProvisionPermissionSet",
            "sso:PutInlinePolicyToPermissionSet",
            "sso:UpdatePermissionSet"
        ],
        "Resource": [
            "arn:aws:sso:::instance/ssoins-<sso-ins-id>",
            "arn:aws:sso:::permissionSet/ssoins-<sso-ins-id>/ps-1122334455667788",
            "arn:aws:sso:::account/445566778899"
        ]
    }
  ]
}

ここでは、プリンシパルは許可セットarn:aws:sso:::permissionSet/ssoins-<sso-ins-id>/ps-1122334455667788を編集し、AWS アカウント 445566778899 に割り当てることができます。編集権限には、お客様管理ポリシー、AWS 管理ポリシー、インラインポリシーが含まれます。

前述のポリシーを使用する際には、ご自身の IAM Identity Center インスタンス ID とアカウント番号で値を書き換えてください。

前述のポリシーでは、arn:aws:sso:::permissionSet/ssoins-<sso-ins-id>/ps-1122334455667788 が許可セットの ARN です。この ARN はコンソールから、または以下の AWS CLI コマンドを使用してすべての許可セットをリストすることで見つけることができます。

aws sso-admin list-permission-sets —instance-arn <上記のインスタンス ARN>

この許可セットも、最初のユースケースと同様に、アカウント ID のリストに追加のアカウント ID を追加することで、複数のアカウントに適用できます。同様に、許可セットを追加して、ユーザーが複数の許可セットを編集し、セットのアカウントに割り当てることができます。

ユースケース 3: タグベースのモデル

この例では、イエローチームには「Team: Yellow」とタグ付けされた許可セットを作成、編集、使用する許可が与えられます。その後、それらのタグ付けされた許可セットをすべてのアカウントに割り当てることができます。

この例は、組織がチームに対して自由に許可セットを作成および編集し、チーム自身のアカウントに割り当てることを可能にします。タグは、どの許可セットを作成および編集できるかを制御するために使用されます。正しいタグが付いていない許可セットは変更できません。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sso:CreatePermissionSet",
        "sso:DescribePermissionSet",
        "sso:UpdatePermissionSet",
        "sso:DeletePermissionSet",
        "sso:DescribePermissionSetProvisioningStatus",
        "sso:DescribeAccountAssignmentCreationStatus",
        "sso:DescribeAccountAssignmentDeletionStatus",
        "sso:TagResource"
      ],
      "Resource": [
        "arn:aws:sso:::instance/ssoins-<sso-ins-id>"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sso:DescribePermissionSet",
        "sso:UpdatePermissionSet",
        "sso:DeletePermissionSet"
      ],
      "Resource": "arn:aws:sso:::permissionSet/ssoins-<sso-ins-id>/",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Team": "Yellow"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "sso:CreatePermissionSet"
      ],
      "Resource": "arn:aws:sso:::permissionSet/ssoins-<sso-ins-id>/",
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/Team": "Yellow"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "sso:TagResource",
      "Resource": "arn:aws:sso:::permissionSet/ssoins-<sso-ins-id>/",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Team": "Yellow",
          "aws:RequestTag/Team": "Yellow"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "sso:CreateAccountAssignment",
        "sso:DeleteAccountAssignment",
        "sso:ProvisionPermissionSet"
      ],
      "Resource": [
        "arn:aws:sso:::instance/ssoins-<sso-ins-id>",
        "arn:aws:sso:::account/556677889900",
        "arn:aws:sso:::account/667788990011",
        "arn:aws:sso:::account/778899001122"
      ]
    },
    {
      "Sid": "InlinePolicy",
      "Effect": "Allow",
      "Action": [
        "sso:GetInlinePolicyForPermissionSet",
        "sso:PutInlinePolicyToPermissionSet",
        "sso:DeleteInlinePolicyFromPermissionSet"
      ],
      "Resource": [
        "arn:aws:sso:::instance/ssoins-<sso-ins-id>"
      ]
    },
    {
      "Sid": "InlinePolicyABAC",
      "Effect": "Allow",
      "Action": [
        "sso:GetInlinePolicyForPermissionSet",
        "sso:PutInlinePolicyToPermissionSet",
        "sso:DeleteInlinePolicyFromPermissionSet"
      ],
      "Resource": "arn:aws:sso:::permissionSet/ssoins-<sso-ins-id>/",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Team": "Yellow"
        }
      }
    }
  ]
}

このポリシーでは、プリンシパルはTeam: Yellowというタグがついた許可セットのみを作成することができ、Account ID 556677889900、667788990011、778899001122のAWSアカウントに対してそれらの Team: Yellowでタグ付けされた許可セットを割り当てることができます。

プリンシパルはTeam: Yellowでタグ付けされた許可セットのインラインポリシーのみを編集できます。他のチームのために既にタグ付けされた許可セットのタグを変更することはできません。

上記のポリシーを使用する際には、ご自身のIAM Identity CenterインスタンスID、タグ、アカウント番号に置き換えてください。

注意:このポリシーは、プリンシパルに適用されるその他のステートメントがないことを前提としています。追加の許可ステートメントが必要な場合は、結果としてポリシーが権限昇格のリスクを生み出さないか確認してください。タグを使用したAWSリソースへのアクセスの管理についての追加情報を参照できます。

このポリシーでは、インラインポリシーを使用した許可設定の委任のみが許可されています。カスタマー管理ポリシーとは、各AWSアカウントに対して固有に払い出されたIAMポリシーのことです。許可セットでカスタマー管理ポリシーを使用する場合は、各AWSアカウントにおいて同じ名前およびパスのIAMポリシーを作成する必要があります。IAMポリシーが存在しない場合は、Identity Centerはアカウントへの割り当てを行いません。カスタマー管理ポリシーをIdentity Centerでどのように使用するかについては、高度な AWS IAM Identity Center のユースケースに向けたカスタマー管理ポリシーの使用方法を参照してください。

以下の2つのステートメントにより、上記のポリシーに対し、カスタマー管理ポリシーの委任も許可するように拡張することもできます。


{
    "Sid": "CustomerManagedPolicy",
    "Effect": "Allow",
    "Action": [
        "sso:ListCustomerManagedPolicyReferencesInPermissionSet",
        "sso:AttachCustomerManagedPolicyReferenceToPermissionSet",
        "sso:DetachCustomerManagedPolicyReferenceFromPermissionSet"
    ],
    "Resource": [
        "arn:aws:sso:::instance/ssoins-<sso-ins-id>"
    ]
},
{
    "Sid": "CustomerManagedABAC",
    "Effect": "Allow",
    "Action": [
        "sso:ListCustomerManagedPolicyReferencesInPermissionSet",
        "sso:AttachCustomerManagedPolicyReferenceToPermissionSet",
        "sso:DetachCustomerManagedPolicyReferenceFromPermissionSet"
    ],
    "Resource": "arn:aws:sso:::permissionSet/ssoins-<sso-ins-id>/*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/Team": "Yellow"
        }
    }
}

注意: 上記ステートメントは両方の記載が必要です。なぜなら、タグによる条件キーaws:ResourceTag/${TagKey}にはPermissionSetリソースタイプのみが対応しており、リストされているアクションは、インスタンスと PermissionSetリソースタイプの両方に対するアクセス権限が必要であるためです。詳細は AWS IAM Identity Center のアクション、リソース、条件キーを参照してください。

ベストプラクティス

許可セットおよびアカウント割り当ての管理を委任する場合に考慮すべきベストプラクティスは以下の通りです。

  • 特定の許可セットの編集権限のみを付与してください。すべての許可セットの編集権限を付与すると、そのロールは彼ら自身の許可セットも編集できてしまいます。
  • 管理者のみがグループ管理を行えるようにしてください。グループ内ユーザーの編集権限を持つユーザーは、Organizations 管理者グループを含め自分を任意のグループに追加できてしまいます。

IAM Identity Center を委任アカウントで使用する場合は、委任された管理のベストプラクティスも考慮してください。

まとめ

組織はIAM Identity Centerでの許可セットとアカウント割り当ての管理をチームに委任することで、チームに権限を与えることができます。これらのアクションの委任は、チームがより迅速に動くことに寄与し、また中央集権的なアイデンティティ管理チームの負担を軽減できます。このシナリオと例は、組織内で組み合わせて拡張できる委任概念を共有しています。

AWS セキュリティに関するニュースをもっと知りたいですか?Xでフォローしてください。

翻訳はソリューションアーキテクトの高野が担当しました。原文はこちらです。