許可の境界を使用して IAM ユーザーとロールの範囲を限定し、権限の昇格を防ぐにはどうすればよいですか?

最終更新日: 2022 年 8 月 22 日

AWS Identity and Access Management (IAM) の管理者アクセスを制限し、権限の昇格を防ぐための許可の境界ポリシーを作成するにはどうすればよいですか?

解決方法

次の IAM ポリシーの例を使用して、これらの制限を指定します。

  • IAM 管理者によって作成された IAM プリンシパルは、AWS リソースへのフルアクセスを持つことができます。許可の境界は独自の許可を提供しないため、AWS リソースへのフルアクセスはアイデンティティベースのポリシーによって異なります。
  • このポリシーでは、IAM プリンシパルによる AWS Billing and Cost Management 関連サービスへのアクセスが制限されます。
  • IAM プリンシパルは、制限されたサービスにアクセスするための独自の許可を付与するように許可の境界を変更することはできません。
  • IAM 管理者は、すでに持っている以上の権限を持つ IAM プリンシパルを作成することはできません。
  • IAM 管理者によって作成された IAM プリンシパルは、IAM 管理者よりも多くのアクセス許可を持つ IAM プリンシパルを作成することはできません。

このポリシーを ScopePermissionsという名前のマネージドポリシーとして保存します。YourAccount_ID をアカウント ID に置き換えます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowAdminAccess",
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    },
    {
      "Sid": "DenyAccessToCostAndBilling",
      "Effect": "Deny",
      "Action": [
        "account:*",
        "aws-portal:*",
        "savingsplans:*",
        "cur:*",
        "ce:*"
    ],
    "Resource": "*"
   },
   {
     "Sid": "DenyPermBoundaryIAMPolicyAlteration",
     "Effect": "Deny",
     "Action": [
       "iam:DeletePolicy",
       "iam:DeletePolicyVersion",
       "iam:CreatePolicyVersion",
       "iam:SetDefaultPolicyVersion"
   ],
   "Resource": [
     "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
   ]
  },
  {
    "Sid": "DenyRemovalOfPermBoundaryFromAnyUserOrRole",
    "Effect": "Deny",
    "Action": [
      "iam:DeleteUserPermissionsBoundary",
      "iam:DeleteRolePermissionsBoundary"
   ],
   "Resource": [
     "arn:aws:iam::YourAccount_ID:user/*",
     "arn:aws:iam::YourAccount_ID:role/*"
   ],
   "Condition": {
     "StringEquals": {
       "iam:PermissionsBoundary": "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
     }
    }
   },
   {
     "Sid": "DenyAccessIfRequiredPermBoundaryIsNotBeingApplied",
     "Effect": "Deny",
     "Action": [
     "iam:PutUserPermissionsBoundary",
     "iam:PutRolePermissionsBoundary"
   ],
   "Resource": [
     "arn:aws:iam::YourAccount_ID:user/*",
     "arn:aws:iam::YourAccount_ID:role/*"
   ],
   "Condition": {
     "StringNotEquals": {
       "iam:PermissionsBoundary": "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
     }
    }
  },
  {
    "Sid": "DenyUserAndRoleCreationWithOutPermBoundary",
    "Effect": "Deny",
    "Action": [
      "iam:CreateUser",
      "iam:CreateRole"
  ],
  "Resource": [
    "arn:aws:iam::YourAccount_ID:user/*",
    "arn:aws:iam::YourAccount_ID:role/*"
  ],
  "Condition": {
    "StringNotEquals": {
      "iam:PermissionsBoundary": "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
    }
   }
 },
 {
   "Sid": "DenyIAMActions",
   "Effect": "Deny",
   "Action": "iam:PassRole",
   "Resource": "arn:aws:iam::YourAccount_ID:role/*"
  }
 ]
}

このポリシーをテストするには:

1.    Bob という名前の新しい IAM ユーザーを作成します。

2.    AdministratorAccess ポリシーを直接 Bob にアタッチし、アクセス許可の境界として ScopePermissions をアタッチします。

3.    Bob として AWS マネジメントコンソールにログインします。その後、次のことを試みます。

  • AWS Billing and Cost Management サービスの Cost Explorer にアクセスします。
  • Bob から許可の境界を削除します。
  • アクセス許可の境界なしで新しい IAM ユーザーとロールを作成します。
  • アクセス許可の境界を適用した Alice という名前の IAM ユーザーを作成し、AdministratorAccess ポリシーをアイデンティティベースのポリシーとして Aliceにアタッチします。

4.    Alice として AWS マネジメントコンソールにログインし、以下を試みます。

  • AWS Billing and Cost Management サービスの Cost Explorer にアクセスします。
  • Alice から許可の境界を削除します。
  • アクセス許可の境界なしで新しい IAM ユーザーとロールを作成します。

アクセス許可の境界により、以下のことが保証されます。

  • Bob は、アクセス許可の境界である ScopePermissions をアタッチせずに新しいユーザーを作成することはできません。
  • Bob が作成した IAM ユーザーおよびロールには、Bob と同じアクセス許可か、それよりも弱いアクセス許可が付与されます。
  • BobAlice は、ポリシーのデフォルトバージョンの削除など、アクセス許可の境界をソースとする IAM ポリシーを変更することはできません。
  • BobAlice は、自身または他のユーザーから適用されたアクセス許可の境界を変更または削除することはできません。
  • 制限されたサービスへのアクセスは、アクセス許可の境界によって拒否されます。
  • AliceBob と同じアクセス許可を有しており、権限の昇格が防止されます。Alice が新しい IAM ユーザーを作成する場合、新しいユーザーに Bob を超えるアクセス許可が付与されることはありません。このアクセス許可の境界により、アクセス許可の境界なしで IAM プリンシパルが作成されることはなくなり、権限の昇格が防止されます。

この記事は役に立ちましたか。


請求に関するサポートまたは技術サポートが必要ですか?