はじめに
IAMはいじらせたいけど、アクセス許可境界(Permissions Boundary)までは触らせたくない、というケースに対応できそうな方法を考えてみました。
概要
以下の禁止が含まれるポリシーを作成し使います。
- すべてのロールに対して、アクセス許可境界の設定・削除の禁止
- すべてのユーザに対して、アクセス許可境界の設定・削除の禁止
- アクセス許可境界として使うポリシーの、編集の禁止
- 対象のポリシーには、専用のタグを付与しておきます
すべてのロール・ユーザのアクセス許可境界が修正できないようにしています。
自身に宛がわれているのみ対象とする場合は、Resource
を直に指定すればよいかと思います。
参考
作成するポリシー
以下のCloudFormationテンプレートを作成し、その後コンソールなどからタグBoundary:True
を付与します。CloudFormationからはマネジメントポリシーにタグは付与できないようですので、別途付与します。
createDenyPermissionBoundaryEdit.yaml
AWSTemplateFormatVersion: '2010-09-09'
Resources:
PolicyDenyPermissionBoundaryEdit:
Type: 'AWS::IAM::ManagedPolicy'
Properties:
ManagedPolicyName: 'DenyPermissionBoundaryEdit'
Path: /
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Deny
Action:
- 'iam:PutRolePermissionsBoundary'
- 'iam:DeleteRolePermissionsBoundary'
Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/*"
- Effect: Deny
Action:
- 'iam:PutUserPermissionsBoundary'
- 'iam:DeleteUserPermissionsBoundary'
Resource: !Sub "arn:aws:iam::${AWS::AccountId}:user/*"
- Effect: Deny
Action: '*'
Resource: !Sub 'arn:aws:iam::${AWS::AccountId}:policy/*'
Condition:
StringEquals:
aws:ResourceTag/Boundary: 'True'
- Effect: Allow
Action: '*'
Resource: '*'
# ManagedPolicyでは定義できないが、忘れないようにコメントアウトして記載
# Tags:
# - Key: 'Boundary'
# Value: 'True'
許可ポリシーは全権限を与えています。必要に応じて最小の権限を付与ください。
動作確認
先のポリシーを、対象のアクセス許可境界として宛がいます。
ユーザにアクセス許可境界を宛がおうとしますが、禁止されているため失敗します。
アクセス許可境界用としてつけているタグがあるポリシーの編集もできません。そのため、自身のアクセス許可境界の禁止を緩めることもできません。
おわりに
今回はアクセス許可境界を変更させないポリシーを考えてみました。運用担当に一部IAM編集のみさせる、という場合に使えるかと思います。
この記事がどなたかのお役に立ちましたら幸いです。