AWS Identity and Access Management
ユーザーガイド

IAM エンティティのアクセス許可の境界

AWS では、IAM エンティティ (ユーザーまたはロール) のアクセス許可の境界をサポートしています。アクセス許可の境界は、管理ポリシーを使用してアイデンティティベースのポリシーが IAM エンティティに付与できるアクセス許可の上限を設定する高度な機能です。エンティティのアクセス許可の境界を設定した場合、エンティティは、アイデンティティベースのポリシーとそのアクセス許可の境界の両方で許可されているアクセス許可のみ実行できます。

ポリシーの詳細については、「ポリシータイプ」を参照してください。

IAM エンティティ (ユーザーまたはロール) の境界を設定するには、AWS 管理ポリシーまたはカスタマー管理ポリシーを使用します。このポリシーでは、ユーザーやロールのアクセス許可の上限を設定します。

たとえば、ShirleyRodriguez という IAM ユーザーに Amazon S3、Amazon CloudWatch、Amazon EC2 の管理のみを許可するとします。このルールを適用するには、次のポリシーを使用して ShirleyRodriguez ユーザーのアクセス許可の境界を設定できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*", "cloudwatch:*", "ec2:*" ], "Resource": "*" } ] }

ポリシーを使用してユーザーのアクセス許可の境界を設定する場合、このポリシーではユーザーのアクセス許可は制限しますが、それ自体のアクセス許可は提供しません。この例のポリシーでは、ShirleyRodriguez のアクセス許可の上限を Amazon S3、CloudWatch、および Amazon EC2 のすべてのオペレーションに設定します。Shirley は、IAM など、他のどのサービスでもオペレーションを実行することはできません。実行を許可するアクセス許可ポリシーが適用されている場合でも同様です。たとえば、ShirleyRodriguez ユーザーに次のポリシーを追加できます。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:CreateUser", "Resource": "*" } }

このポリシーでは、IAM のユーザーの作成を許可します。このポリシーを ShirleyRodriguez ユーザーにアタッチすると、Shirley はユーザーを作成しようとしても、オペレーションは失敗します。失敗する理由は、アクセス許可の境界として使用されているポリシーがポリシー評価ロジックでチェックされ、この境界では iam:CreateUser オペレーションが許可されないためです。AWS でのすべてのオペレーションを Shirley に許可するには、Amazon S3、Amazon CloudWatch、または Amazon EC2 のアクションに関するアクセス許可ポリシーを追加する必要があります。または、IAM のユーザーの作成を許可するように、アクセス許可の境界を更新します。

境界を設定した場合の有効なアクセス許可の評価

IAM エンティティ (ユーザーまたはロール) のアクセス許可の境界では、エンティティに許可されるアクセス許可の上限が設定されます。これにより、ユーザーやロールの有効なアクセス許可が変わる場合があります。エンティティの有効なアクセス許可は、ユーザーやロールに影響するすべてのポリシーによって付与されるアクセス許可です。エンティティのアクセス許可は、アカウント内で、アイデンティティベースのポリシー、リソースベースのポリシー、アクセス許可の境界、組織 SCP、またはセッションポリシーの影響を受ける場合があります。各種ポリシーの詳細については、「ポリシーとアクセス許可」を参照してください。

これらのいずれかのポリシータイプによって、オペレーションへのアクセスが明示的に拒否された場合、そのリクエストは拒否されます。複数のアクセス許可タイプによってエンティティに付与されたアクセス許可はさらに複雑です。AWS でのポリシーの評価の詳細については、「ポリシーの評価論理」を参照してください。

アイデンティティベースのポリシー (境界あり) – アイデンティティベースのポリシーは、ユーザー、ユーザーのグループ、またはロールにアタッチされているインラインポリシーまたは管理ポリシーです。アイデンティティベースのポリシーはエンティティにアクセス許可を付与し、アクセス許可の境界は、それらのアクセス許可を制限します。有効なアクセス許可は、両方のポリシータイプで許可されているすべてのものが対象です。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。


                アイデンティティベースのポリシーとアクセス許可の境界の評価

リソースベースのポリシー – リソースベースのポリシーでは、指定されたプリンシパルが、ポリシーがアタッチされているリソースにアクセスする方法を制御します。アカウント内では、アクセス許可の境界によって、リソースベースのポリシーで付与されるアクセス許可が下がることはありません。アクセス許可の境界は、アイデンティティベースのポリシーによってエンティティに付与されるアクセス許可を下げ、リソースベースのポリシーはエンティティに追加のアクセス許可を付与します。このポリシータイプのセットに対する有効なアクセス許可は、リソースベースのポリシーで許可されているものに加えて、アクセス許可の境界とアイデンティティベースのポリシーの両方で許可されているものすべてです。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。


                リソースベースのポリシー、アクセス許可の境界、およびアイデンティティベースのポリシーの評価

組織 SCP – SCP は、全体の AWS アカウントに適用されます。この場合、アカウント内のプリンシパルによって行われるすべてのリクエストのアクセス許可が制限されます。IAM エンティティ (ユーザーまたはロール) が、SCP、アクセス許可の境界、アイデンティティベースのポリシーの影響を受けるリクエストを行った場合、そのリクエストは、その 3 つすべてのポリシータイプで許可されている場合にのみ許可されます。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。


                SCP、アクセス許可の境界、アイデンティティベースのポリシーの評価

セッションポリシー – セッションポリシーは、ロールまたはフェデレーティッドユーザーの一時セッションをプログラムで作成する際にパラメータとして渡す高度なポリシーです。セッションのアクセス許可は、セッションの作成に使用する IAM エンティティ (ユーザーまたはロール) と、セッションポリシーから派生します。エンティティのアイデンティティベースのポリシーのアクセス許可は、セッションポリシーとアクセス許可の境界で制限されています。このポリシータイプのセットの有効なアクセス許可は、3 つのすべてのタイプで許可されているすべてのものが対象です。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。セッションポリシーの詳細については、「セッションポリシー」を参照してください。


                セッションポリシー、アクセス許可の境界、およびアイデンティティベースのポリシーの評価

アクセス許可の境界を使用した他のユーザーへの責任の委任

アクセス許可の境界を使用して、アクセス許可の管理タスク (ユーザーの作成など) をアカウントの IAM ユーザーに委任できます。これにより、アクセス許可の特定の境界内で、ユーザーの代わりに他のユーザーがタスクを実行できます。

たとえば、María は X-Company の AWS アカウントの管理者であるとします。彼女は、ユーザーの作成業務を Zhang を委任したいと考えます。しかし、Zhang が以下の社内ルールに従ってユーザーを作成することを確認する必要があります。

  • ユーザーは、IAM を使用してユーザー、グループ、ロール、またはポリシーを作成できない。

  • ユーザーは、Amazon S3 バケット logs へのアクセスを拒否される。また、Amazon EC2 インスタンス i-1234567890abcdef0 にはアクセスできない。

  • ユーザーは各自の境界ポリシーを削除できない。

これらのルールを適用するために、María は以下のタスクを実行します (各タスクの詳細は後述します)。

  1. María は、XCompanyBoundaries 管理ポリシーを作成し、これをアカウントのすべての新しいユーザーに対するアクセス許可の境界として使用します。

  2. María は、DelegatedUserBoundary 管理ポリシーを作成し、これを Zhang のアクセス許可の境界として割り当てます。

  3. María は、DelegatedUserPermissions 管理ポリシーを作成し、これを Zhang のアクセス許可ポリシーとしてアタッチします。

  4. María は、Zhang に新しい責任と制限を伝えます。

タスク 1: María は、最初に管理ポリシーを作成して、新しいユーザーの境界を定義する必要があります。María は、必要なアクセス許可ポリシーをユーザーに付与することを Zhang に許可しますが、これらのユーザーを制限したいと思います。これを行うには、次のカスタマー管理ポリシーを XCompanyBoundaries という名前で作成します。このポリシーでは、ユーザーに対して複数のサービスへのフルアクセスと IAM での制限された自己管理アクセスを許可し、Amazon S3 バケット logs または Amazon EC2 インスタンス i-1234567890abcdef0 へのアクセスを拒否します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ServiceBoundaries", "Effect": "Allow", "Action": [ "s3:*", "cloudwatch:*", "ec2:*", "dynamodb:*" ], "Resource": "*" }, { "Sid": "AllowIAMConsoleForCredentials", "Effect": "Allow", "Action": [ "iam:ListUsers", "iam:GetAccountPasswordPolicy" ], "Resource": "*" }, { "Sid": "AllowManageOwnPasswordAndAccessKeys", "Effect": "Allow", "Action": [ "iam:*AccessKey*", "iam:ChangePassword", "iam:GetUser", "iam:*ServiceSpecificCredential*", "iam:*SigningCertificate*" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "DenyS3Logs", "Effect": "Deny", "Action": "s3:*", "Resource": [ "arn:aws:s3:::logs", "arn:aws:s3:::logs/*" ] }, { "Sid": "DenyEC2Production", "Effect": "Deny", "Action": "ec2:*", "Resource": "arn:aws:ec2:*:*:instance/i-1234567890abcdef0" } ] }

ステートメントごとに用途は異なります。

  1. このポリシーの ServiceBoundaries ステートメントでは、指定された AWS のサービスへのフルアクセスを許可します。つまり、これらのサービスにおける新しいユーザーのアクションは、ユーザーにアタッチされているアクセス許可ポリシーによってのみ制限されます。

  2. AllowIAMConsoleForCredentials ステートメントは、すべての IAM ユーザーを一覧表示するためのアクセス権を付与します。このアクセス権は、AWS マネジメントコンソール で [ユーザー] ページに移動するために必要です。また、このアクセス権では、アカウントのパスワード要件を表示することができます。これは、自分のパスワードを変更する場合に必要です。

  3. AllowManageOwnPasswordAndAccessKeys ステートメントは、自分のパスワードおよびプログラムを使用したアクセスキーの管理のみ許可します。これが重要であるのは、Zhang や別の管理者が IAM へのフルアクセスを許可するアクセス許可ポリシーを新しいユーザーに与えた場合、このユーザーは自分や他のユーザーのアクセス許可を変更できるようになるためです。このステートメントで、これを防止します。

  4. DenyS3Logs ステートメントでは、logs バケットへのアクセスを明示的に拒否します。

  5. DenyEC2Production ステートメントでは、i-1234567890abcdef0 インスタンスへのアクセスを明示的に拒否します。

タスク 2: María は、すべての X-Company ユーザーを作成することを Zhang に許可しますが、条件として XCompanyBoundaries をアクセス許可の境界とします。そのために、次のカスタマー管理ポリシーを DelegatedUserBoundary という名前で作成します。このポリシーでは、Zhang に許可されるアクセス許可の上限を定義します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateOrChangeOnlyWithBoundary", "Effect": "Allow", "Action": [ "iam:CreateUser", "iam:DeleteUserPolicy", "iam:AttachUserPolicy", "iam:DetachUserPolicy", "iam:PutUserPermissionsBoundary" ], "Resource": "*", "Condition": {"StringEquals": {"iam:PermissionsBoundary": "arn:aws:iam::111122223333:policy/XCompanyBoundaries"}} }, { "Sid": "CloudWatchAndOtherIAMTasks", "Effect": "Allow", "Action": [ "cloudwatch:*", "iam:GetUser", "iam:ListUsers", "iam:DeleteUser", "iam:UpdateUser", "iam:CreateAccessKey", "iam:CreateLoginProfile", "iam:GetAccountPasswordPolicy", "iam:GetLoginProfile", "iam:*Group*", "iam:CreatePolicy", "iam:DeletePolicy", "iam:DeletePolicyVersion", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetUserPolicy", "iam:GetRolePolicy", "iam:ListPolicies", "iam:ListPolicyVersions", "iam:ListEntitiesForPolicy", "iam:ListUserPolicies", "iam:ListAttachedUserPolicies", "iam:ListRolePolicies", "iam:ListAttachedRolePolicies", "iam:PutUserPolicy", "iam:SetDefaultPolicyVersion", "iam:SimulatePrincipalPolicy", "iam:SimulateCustomPolicy" ], "Resource": "*" }, { "Sid": "NoBoundaryPolicyEdit", "Effect": "Deny", "Action": [ "iam:CreatePolicyVersion", "iam:DeletePolicy", "iam:DeletePolicyVersion", "iam:SetDefaultPolicyVersion" ], "Resource": [ "arn:aws:iam::123456789012:policy/XCompanyBoundaries", "arn:aws:iam::123456789012:policy/DelegatedUserBoundary" ] }, { "Sid": "NoBoundaryUserDelete", "Effect": "Deny", "Action": "iam:DeleteUserPermissionsBoundary", "Resource": "*" } ] }

ステートメントごとに用途は異なります。

  1. CreateOrChangeOnlyWithBoundary ステートメントでは、IAM ユーザーを作成することを Zhang に許可します。ただし、XCompanyBoundaries ポリシーを使用してアクセス許可の境界を設定することを条件とします。また、このステートメントでは、既存のユーザーにアクセス許可の境界を設定することを Zhang に許可します。ただし、同じポリシーを使用することを条件とします。最後に、このステートメントでは、このアクセス許可の境界が設定されたユーザーのアクセス許可ポリシーを管理することを Zhang に許可します。

  2. CloudWatchAndOtherIAMTasks ステートメントでは、他のユーザー、グループ、およびポリシーの管理タスクを実行することを Zhang に許可します。Zhang には、自分自身や他のユーザーのアクセス許可の境界を削除する権限がないことに注意してください。

  3. NoBoundaryPolicyEdit ステートメントでは、XCompanyBoundaries ポリシーを更新するためのアクセスを Zhang に拒否します。自分自身や他のユーザーのアクセス許可の境界を設定するために使用されているポリシーを変更することは許可されません。

  4. NoBoundaryUserDelete ステートメントは、Zhang が自分自身あるいは他のユーザーのアクセス許可境界を削除するためにアクセスすることを拒否します。

次に María は、Zhang ユーザーのアクセス許可の境界として DelegatedUserBoundary ポリシーを割り当てます。

タスク 3: アクセス許可の境界ではアクセス許可の上限を設定するだけで、それ自体はアクセスを付与しないため、Maria は Zhang のアクセス許可ポリシーを作成する必要があります。次のポリシーを DelegatedUserPermissions という名前で作成します。このポリシーでは、設定された境界内で、Zhang が実行できるオペレーションを定義します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAM", "Effect": "Allow", "Action": "iam:*", "Resource": "*" }, { "Sid": "CloudWatchLimited", "Effect": "Allow", "Action": [ "cloudwatch:GetDashboard", "cloudwatch:GetMetricData", "cloudwatch:ListDashboards", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics" ], "Resource": "*" }, { "Sid": "S3BucketContents", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::ZhangBucket" } ] }

ステートメントごとに用途は異なります。

  1. このポリシーの IAM ステートメントでは、IAM へのフルアクセスを Zhang に許可します。ただし、アクセス許可の境界で一部の IAM オペレーションのみが許可されるため、有効な IAM アクセス許可はアクセス許可の境界でのみ限定されます。

  2. CloudWatchLimited ステートメントでは、CloudWatch で 5 つのアクションを実行することを Zhang に許可します。アクセス許可の境界ですべての CloudWatch アクションが許可されるため、有効な CloudWatch アクセス許可はアクセス許可ポリシーでのみ限定されます。

  3. S3BucketContents ステートメントでは、Amazon S3 バケット ZhangBucket を表示することを Zhang に許可します。ただし、アクセス許可の境界で一切の Amazon S3 アクションが許可されないため、アクセス許可ポリシーにかかわらず、S3 オペレーションを実行することはできません。

次に María は、DelegatedUserPermissions ユーザーのアクセス許可ポリシーとして Zhang ポリシーをアタッチします。

タスク 4: María は、新しいユーザーを作成する手順を Zhang に伝えます。新しいユーザーを作成して必要なアクセス権を付与できますが、アクセス許可の境界として XCompanyBoundaries ポリシーを割り当てる必要があることを説明します。

Zhang は以下のタスクを実行します。

  1. Zhang は AWS マネジメントコンソール を使用してユーザーを作成します。ユーザー名として「Nikhil」と入力し、このユーザーに対してコンソールへのアクセスを有効にします。

  2. [アクセス許可の設定] ページで、Zhang は Nikhil にタスクの実行を許可するアクセス許可ポリシーとして [IAMFullAccess] と [AmazonS3ReadOnlyAccess] を選択します。

  3. Zhang は、María に教えられた手順を忘れて、[Set permissions boundary (アクセス許可の境界の設定)] セクションをスキップします。

  4. Zhang はユーザーの詳細を確認し、[ユーザーの作成] を選択します。

    オペレーションは失敗し、アクセスが拒否されます。Zhang の DelegatedUserBoundary アクセス許可の境界では、作成するユーザーにアクセス許可の境界として XCompanyBoundaries ポリシーが必要です。

  5. Zhang は前のページに戻ります。[Set permissions boundary (アクセス許可の境界の設定)] セクションで、XCompanyBoundaries ポリシーを選択します。

  6. Zhang はユーザーの詳細を確認し、[ユーザーの作成] を選択します。

    ユーザーが作成されます。

Nikhil は、サインインすると、アクセス許可の境界で拒否されるオペレーションを除いて、IAM と Amazon S3 にアクセスできます。たとえば、IAM で自分のパスワードは変更できますが、別のユーザーを作成したり、自分のポリシーを編集したりすることはできません。Nikhil は、Amazon S3 で所有しているすべてのバケットへの読み取り専用アクセス権限を持っています。ただし、他のユーザーが Nikhil に logs バケットの所有権を付与しても、Nikhil はそれを表示することはできません。バケット所有権の詳細については、Amazon Simple Storage Service 開発者ガイドの「Amazon S3 リソースへのアクセス許可の管理」を参照してください。

i-1234567890abcdef0 インスタンスの開始および停止を許可するリソースベースのポリシーを追加しても、Nikhil はこのインスタンスを管理できません。理由は、i-1234567890abcdef0 インスタンスのアクションはすべて、彼のアクセス許可の境界によって明示的に拒否されているためです。いずれかのポリシータイプで明示的に拒否されていると、リクエストは拒否されます。ただし、Secrets Manager シークレットにアタッチされているリソースベースのポリシーで、secretsmanager:GetSecretsValue アクションの実行を Nikhil に許可している場合、Nikhil は、そのシークレットを取得して復号できます。これは、Secrets Manager オペレーションは、彼のアクセス許可境界によって明示的に拒否されており、アクセス許可の境界では、リソースベースのポリシーを制限していないためです。