
リソースARNとアクセスレベルに基づいて最小権限のAWS IAMポリシーを生成し、クラウドインフラストラクチャのセキュアなポリシー作成を自動化します。
IAM最小権限ポリシージェネレーター。

チュートリアルと完全なドキュメントについては、ReadTheDocs上のプロジェクトをご覧ください。
Policy Sentryに関するSalesforce Engineering Blogの記事もご確認ください。
セキュリティを考慮したIAMポリシーを手作業で作成するのは、非常に退屈で非効率です。多くのInfrastructure as Code開発者は、次のような経験をしたことがあるでしょう。
このようなプロセスは、セキュリティにとってもInfrastructure as Code開発者にとっても理想的ではありません。IAMポリシーを安全に作成することを容易にし、最小権限IAMポリシー作成の複雑さを抽象化する必要があります。そのためにこのツールを作りました。
Policy Sentryを使用すると、ユーザーは数秒で最小権限のIAMポリシーを作成できます。従来のように手作業でIAMポリシーを作成するのではなく、アクセスレベルとリソースに基づいてスコープが絞られたポリシーが生成されます。侵害が発生した場合、認証情報の被害範囲を制限し、IAMプリンシパルが必要なものにのみアクセスできるようにします。
このツール以前は、リソースARN制約付きのIAMポリシーを作成するのに数時間かかることがありましたが、今では数秒で完了します。 開発者はアクセスが必要なリソースを決定するだけでよく、Policy SentryがIAMポリシーの複雑さを抽象化して開発プロセスから取り除きます。
Policy Sentryのフラッグシップ機能は、リソースARNとアクセスレベルに基づいてIAMポリシーを作成できることです。CRUD機能は、IAC開発者がAWS IAMの複雑さを理解する必要はないという意見に基づいています。複雑さを抽象化すべきです。実際、開発者は次のように言えるべきです。
arn:aws:s3:::example-org-sbx-vmimport への読み取り/書き込み/一覧アクセスが必要"arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret への権限管理アクセスが必要"arn:aws:ssm:us-east-1:123456789012:parameter/test へのタグ付けアクセスが必要"...そして、自動化がそれらのアクセスレベルに対応するポリシーを作成するべきです。
どうやってこれを実現するのでしょうか?Policy Sentryは、AWSの[アクション、リソース、条件キー][1]に関するドキュメントを活用して、アクション、アクセスレベル、リソースタイプを検索し、ARNとアクセスレベルに基づいてポリシーを生成します。以下の表のスニペットを考えてみてください。
| アクション | アクセスレベル | リソースタイプ |
|---|---|---|
| ssm:GetParameter | 読み取り | parameter |
| ssm:DescribeParameters | 一覧 | parameter |
| ssm:PutParameter | 書き込み | parameter |
| secretsmanager:PutResourcePolicy | 権限管理 | secret |
| secretsmanager:TagResource | タグ付け | secret |
Policy Sentryは、これらすべてのドキュメントを単一のデータベースに集約し、そのデータベースを使用してアクション、リソース、アクセスレベルに基づいてポリシーを生成します。
brew tap salesforce/policy_sentry https://github.com/salesforce/policy_sentry
brew install policy_sentry
pip3 install --user policy_sentry
Bash補完を有効にするには、.bashrcに以下を追加します:
eval "$(_POLICY_SENTRY_COMPLETE=bash_source policy_sentry)"
ZSH補完を有効にするには、.zshrcに以下を追加します:
eval "$(_POLICY_SENTRY_COMPLETE=zsh_source policy_sentry)"
policy_sentry create-template --output-file crud.yml --template-type crud
mode: crud
name: ''
# リソースARNを指定
read:
- ''
write:
- ''
list:
- ''
tagging:
- ''
permissions-management:
- ''
# リソース制約をサポートしないアクション
wildcard-only:
single-actions: # 単独のアクション
- ''
# サービス全体 - 's3'や'ec2'など
service-read:
- ''
service-write:
- ''
service-list:
- ''
service-tagging:
- ''
service-permissions-management:
- ''
# ここにアクションをリストすると、リソース制約の要件をスキップします。
skip-resource-constraints:
- ''
# ここに指定したアクションを出力から除外します。kms:Delete*のようなワイルドカードを受け付けます。
exclude-actions:
- ''
# このポリシーにAssumeRoleアクションを含める場合
sts:
assume-role:
- ''
assume-role-with-saml:
- ''
assume-role-with-web-identity:
- ''
mode: crud
read:
- 'arn:aws:ssm:us-east-1:123456789012:parameter/myparameter'
write:
- 'arn:aws:ssm:us-east-1:123456789012:parameter/myparameter'
list:
- 'arn:aws:ssm:us-east-1:123456789012:parameter/myparameter'
tagging:
- 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret'
permissions-management:
- 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret'
policy_sentry write-policy --input-file crud.yml