Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
policy_sentry — リソースARNとアクセスレベルに基づいて最小権限のAWS IAMポリシーを生成し、クラウドインフラストラクチャのセキュアなポリシー作成を自動化します。 | Kitploit
ツール/GitHubGitHub/salesforce/policy_sentry
クラウドインフラストラクチャセキュリティ構成監査クラウドセキュリティDevSecOpsアイデンティティ&アクセス管理 (IAM)
GitHubsalesforce/policy_sentry

policy_sentry

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

リポジトリを見る
2.2k1575日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

Policy Sentry

IAM最小権限ポリシージェネレーター。

continuous-integration Documentation Status Join the chat at https://gitter.im/salesforce/policy_sentry Twitter PyPI Python Version Downloads

  • チュートリアル
    • インストール
      • パッケージマネージャー
      • シェル補完
    • ステップ1:テンプレートの作成
    • ステップ2:ARNのコピー&ペースト
    • ステップ3:write-policyコマンド
  • チートシート
    • ポリシー作成チートシート
    • IAMデータベースクエリチートシート
    • ローカル初期化(オプション)
  • その他の使い方
    • コマンド
    • Pythonライブラリの使い方
    • Docker
    • Terraform
  • 参考資料

ドキュメント

チュートリアルと完全なドキュメントについては、ReadTheDocs上のプロジェクトをご覧ください。

Policy Sentryに関するSalesforce Engineering Blogの記事もご確認ください。

概要

セキュリティを考慮したIAMポリシーを手作業で作成するのは、非常に退屈で非効率です。多くのInfrastructure as Code開発者は、次のような経験をしたことがあるでしょう。

  • ユーザーやロールに業務を遂行するために必要な最小限の権限を付与しようと決意し、AWSサービスのアクション、リソース、条件キーに関するAWS IAMドキュメントをくまなく調べるのに多大な時間を費やす。
  • チームリーダーは製品品質のためにIAMポリシーにセキュリティを組み込むよう奨励するが、プロジェクトの期限に追われて挫折してしまう。
  • チームにIAMポリシーを作成してくれるセキュリティ担当者がおらず、実行したAWS APIコールを自動的に検出してリソースARN制約付きでポリシーを生成してくれる自動化ツールもない。
  • そのような自動化を夢見た後、最小権限のIAMポリシーを慈善事業のように手書きすることが、期限までにコードを完成させる能力を危うくすることに気づく。
  • マネージドポリシー(なぜ使わないのか?)を使用するか、APIコール名を大まかに見てワイルドカードを使って進める。

このようなプロセスは、セキュリティにとっても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のアクション、リソース、条件キーに関するドキュメントを活用して、アクション、アクセスレベル、リソースタイプを検索し、ARNとアクセスレベルに基づいてポリシーを生成します。以下の表のスニペットを考えてみてください。

Policy Sentryは、これらすべてのドキュメントを単一のデータベースに集約し、そのデータベースを使用してアクション、リソース、アクセスレベルに基づいてポリシーを生成します。

チュートリアル

インストール

パッケージマネージャー

  • Homebrew
root@kitploit:~
brew tap salesforce/policy_sentry https://github.com/salesforce/policy_sentry
brew install policy_sentry
  • Pip
root@kitploit:~
pip3 install --user policy_sentry

シェル補完

Bash補完を有効にするには、.bashrcに以下を追加します:

root@kitploit:~
eval "$(_POLICY_SENTRY_COMPLETE=bash_source policy_sentry)"

ZSH補完を有効にするには、.zshrcに以下を追加します:

root@kitploit:~
eval "$(_POLICY_SENTRY_COMPLETE=zsh_source policy_sentry)"

ステップ1:テンプレートの作成

  • リソースとアクセスレベルに基づいてポリシーを生成するには、まず次のコマンドでテンプレートを作成し、ARNを入力できるようにします:
root@kitploit:~
policy_sentry create-template --output-file crud.yml --template-type crud
  • 次のようなファイルが生成されます:
root@kitploit:~
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:
    - ''

ステップ2:ARNのコピー&ペースト

  • ポリシーに含めたいARNをコピー&ペーストします。使用しない行は削除するか、そのまま残しても構いません。
root@kitploit:~
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'

ステップ3:write-policyコマンド

  • 次に、このコマンドを実行します:
root@kitploit:~
policy_sentry write-policy --input-file crud.yml
  • 次の結果が生成されます:
root@kitploit:~
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SsmReadParameter",
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter",
                "ssm:GetParameterHistory",
                "ssm:GetParameters",
                "ssm:GetParametersByPath",
                "ssm:ListTagsForResource"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:123456789012:parameter/myparameter"
            ]
        },
        {
            "Sid": "SsmWriteParameter",
            "Effect": "Allow",
            "Action": [
                "ssm:DeleteParameter",
                "ssm:DeleteParameters",
                "ssm:LabelParameterVersion",
                "ssm:PutParameter"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:123456789012:parameter/myparameter"
            ]
        },
        {
            "Sid": "SecretsmanagerPermissionsmanagementSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:DeleteResourcePolicy",
                "secretsmanager:PutResourcePolicy"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"
            ]
        },
        {
            "Sid": "SecretsmanagerTaggingSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:TagResource",
                "secretsmanager:UntagResource"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"
            ]
        }
    ]
}

上記のポリシーが、ユーザーが指定したARNと要求されたアクセスレベルを認識していることに注目してください。例えば、SID SecretsmanagerTaggingSecret には、secretリソースタイプに割り当てられたタグ付けアクションのみが含まれています。

これにより、IAMポリシーの開発時間が大幅に短縮され、作成されるすべてのポリシーがロールに必要なものだけにアクセスを制限することが保証されます。開発者はアクセスが必要なリソースを決定するだけでよく、IAMポリシーの複雑さを開発プロセスから抽象化できます。

チートシート

ポリシー作成チートシート

root@kitploit:~
# まずテンプレートを作成!!!これにより、YAML形式を覚える必要なく、必要な値を貼り付けるだけで済みます
# CRUDモード
policy_sentry create-template --output-file tmp.yml --template-type crud
# アクションモード
policy_sentry create-template --output-file tmp.yml --template-type actions

# リソース固有のアクセスレベルに基づいてポリシーを作成
policy_sentry write-policy --input-file examples/yml/crud.yml

# アクションのリストに基づいてポリシーを作成
policy_sentry write-policy --input-file examples/yml/actions.yml

IAMデータベースクエリチートシート

root@kitploit:~

###############
# アクションテーブル
###############
# 注:出力形式を変更するには --fmt yaml または --fmt json を使用。デフォルトはクエリ用のjson

# リソース制約をサポートしないアクションのリストを取得
policy_sentry query action-table --service s3 --resource-type "*" --fmt yaml

# S3の"書き込み"レベルでリソース制約をサポートしないアクションのリストを取得
policy_sentry query action-table --service s3 --access-level write --resource-type "*" --fmt yaml

# 全てのサービスから"権限管理"アクセスを持つIAMアクションのリストを取得
policy_sentry query action-table --service all --access-level permissions-management

# RAMサービスで利用可能なすべてのIAMアクションのリストを取得
policy_sentry query action-table --service ram

# `ram:TagResource` IAMアクションの詳細を取得
policy_sentry query action-table --service ram --name tagresource

# RAMサービスで権限管理アクセスレベルを持つすべてのIAMアクションのリストを取得
policy_sentry query action-table --service ram --access-level permissions-management

# SESサービスで`ses:FeedbackAddress`条件キーをサポートするすべてのIAMアクションのリストを取得
policy_sentry query action-table --service ses --condition ses:FeedbackAddress

###########
# ARNテーブル
###########

# SSMサービスで利用可能なすべてのRAW ARN形式のリストを取得
policy_sentry query arn-table --service ssm

# `cloud9` ARNの短縮名`environment`に対応するRAW ARN形式を取得
policy_sentry query arn-table --service cloud9 --name environment

# すべてのRAW ARN形式とその短縮名のキー/バリューペアを取得
policy_sentry query arn-table --service cloud9 --list-arn-types

######################
# 条件キーテーブル
######################

# Cloud9サービスで利用可能なすべての条件キーのリストを取得
policy_sentry query condition-table --service cloud9

# `cloud9:Permissions`という条件キーの詳細を取得
policy_sentry query condition-table --service cloud9 --name cloud9:Permissions

ローカル初期化(オプション)

root@kitploit:~
# policy_sentryの設定フォルダを初期化し、IAMデータベーステーブルを作成
policy_sentry initialize

# AWSドキュメントの最新バージョンを取得して、新しいサービスを試す
policy_sentry initialize --fetch

# 独自のアクセスレベルファイルを指定してアクセスレベルを上書き(例:権限管理レベルの修正)
policy_sentry initialize --access-level-overrides-file ~/.policy_sentry/overrides-resource-policies.yml

policy_sentry initialize --access-level-overrides-file ~/.policy_sentry/access-level-overrides.yml

その他の使い方

コマンド

  • create-template:write-policyコマンドタイプで使用するYMLファイルテンプレートを作成します。

  • write-policy:YAMLファイルを利用してポリシーを自動生成します。

    • オプション1:CRUDレベル(読み取り、書き込み、一覧、タグ付け、権限管理)とリソースのARNを指定します。ポリシーを自動生成します。ドキュメントを参照してください。
    • オプション2:アクションのリストを指定します。IAMポリシーを自動生成しますが、ARNは自分で入力する必要があります。ドキュメントを参照してください。
  • query:IAMデータベーステーブルを照会します。Policy Sentryテンプレートの記入や、データベースの簡単な知識照会に役立ちます。

    • オプション1:アクションテーブルの照会(action-table)
    • オプション2:ARNテーブルの照会(arn-table)
    • オプション3:条件テーブルの照会(condition-table)
  • initialize:(オプション)アクション、リソース、条件キーのドキュメントで利用可能なすべてのサービスを含むSQLiteデータベースを作成します。ドキュメントを参照してください。

Pythonライブラリの使い方

独自のPythonコードを開発していて、Policy Sentryをサードパーティパッケージとしてインポートしたい場合、初期化をスキップして、Pythonパッケージ自体にバンドルされているローカルデータベースファイルを利用できます。

これは、IAMデータベースの使用を必要とするPolicy Sentryの機能(IAMデータベーステーブルの照会など)を活用したい開発者にとって特に便利です。これにより、データベースを初期化する必要がなく、すぐに照会を実行できます。

コード例はこちらにあります。以下にも示します。

root@kitploit:~
from policy_sentry.querying.actions import get_actions_for_service


def example():
    actions = get_actions_for_service('cloud9')  # データベースへのアクセスを必要とする任意のメソッドを利用できます
    for action in actions:
        print(action)

if __name__ == '__main__':
    example()

結果は次のようになります:

root@kitploit:~
cloud9:CreateEnvironmentEC2
cloud9:CreateEnvironmentMembership
cloud9:DeleteEnvironment
cloud9:DeleteEnvironmentMembership
cloud9:DescribeEnvironmentMemberships
cloud9:DescribeEnvironmentStatus
cloud9:DescribeEnvironments
cloud9:GetUserSettings
cloud9:ListEnvironments
cloud9:ListTagsForResource
cloud9:TagResource
cloud9:UntagResource
cloud9:UpdateEnvironment
cloud9:UpdateEnvironmentMembership
cloud9:UpdateUserSettings

Docker

Pythonでスクリプトをインストールする代わりにDockerを使用したい場合、それもサポートしています。リポジトリのルートから、次のコマンドでDockerイメージをビルドします:

root@kitploit:~
docker build -t kmcquade/policy_sentry .

基本的なコマンドを実行するには、次のようにします:

root@kitploit:~
# 引数なしの基本コマンド
docker run -i --rm kmcquade/policy_sentry:latest "--help"
docker run -i --rm kmcquade/policy_sentry:latest "query"

# データベースの照会
docker run -i --rm kmcquade/policy_sentry:latest "query action-table --service all --access-level permissions-management"

write-policyコマンドは、STDINを介してYML設定を渡すこともサポートしています。Docker方式を使用している場合は、以下で試してみてください:

root@kitploit:~
# STDINで設定を渡してポリシーを作成
cat examples/yml/crud.yml | docker run -i --rm kmcquade/policy_sentry:latest "write-policy"

cat examples/yml/actions.yml | docker run -i --rm kmcquade/policy_sentry:latest "write-policy"

Terraform

Terraformモジュールはこちらで公開・保守されています。

参考資料

  • ドキュメントスクレイピングプロセスは、類似のansibleハッキングスクリプトから着想を得て借用しました。
  • IDベースポリシーとリソースベースポリシー
  • AWSサービスのアクション、リソース、条件キー
ツールをダウンロード
アクションアクセスレベルリソースタイプ
ssm:GetParameter読み取りparameter
ssm:DescribeParameters一覧parameter
ssm:PutParameter書き込みparameter
secretsmanager:PutResourcePolicy権限管理secret
secretsmanager:TagResourceタグ付けsecret