
리소스 ARN 및 액세스 수준을 기반으로 최소 권한 AWS IAM 정책을 생성하여 클라우드 인프라를 위한 보안 정책 생성을 자동화합니다.
IAM 최소 권한 정책 생성기.

연습 및 전체 문서는 ReadTheDocs 프로젝트를 방문하세요.
Policy Sentry에 대한 Salesforce Engineering 블로그 게시물을 참조하세요.
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 문서([Actions, Resources, and Condition Keys][1])를 활용하여 Actions, 액세스 수준, 리소스 유형을 조회하고 ARN 및 액세스 수준에 따라 정책을 생성합니다. 아래 표 조각을 살펴보세요.
| Actions | 액세스 수준 | 리소스 유형 |
|---|---|---|
| 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: ''
# Specify resource ARNs
read:
- ''
write:
- ''
list:
- ''
tagging:
- ''
permissions-management:
- ''
# Actions that do not support resource constraints
wildcard-only:
single-actions: # standalone actions
- ''
# Service-wide - like 's3' or 'ec2'
service-read:
- ''
service-write:
- ''
service-list:
- ''
service-tagging:
- ''
service-permissions-management:
- ''
# Skip resource constraint requirements by listing actions here.
skip-resource-constraints:
- ''
# Exclude actions from the output by specifying them here. Accepts wildcards, like kms:Delete*
exclude-actions:
- ''
# If this policy needs to include an AssumeRole action
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