
न्यूनतम विशेषाधिकार वाली AWS IAM नीतियाँ संसाधन ARNs और पहुँच स्तरों के आधार पर उत्पन्न करता है, क्लाउड बुनियादी ढाँचे के लिए सुरक्षित नीति निर्माण को स्वचालित करता है।
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 की प्रमुख विशेषता यह है कि यह संसाधन ARNs और एक्सेस स्तरों के आधार पर IAM नीतियां बना सकता है। हमारी CRUD कार्यक्षमता इस राय पर आधारित है कि IAC डेवलपर्स को AWS IAM की जटिलताओं को समझने की आवश्यकता नहीं होनी चाहिए - हमें उनके लिए जटिलता को सारगर्भित करना चाहिए। वास्तव में, डेवलपर्स को केवल यह कहने में सक्षम होना चाहिए...
arn:aws:s3:::example-org-sbx-vmimport पर Read/Write/List एक्सेस चाहिए"arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret पर Permissions Management एक्सेस चाहिए"arn:aws:ssm:us-east-1:123456789012:parameter/test पर Tagging एक्सेस चाहिए"...और हमारे ऑटोमेशन को उन एक्सेस स्तरों के अनुरूप नीतियां बनानी चाहिए।
हम यह कैसे करते हैं? खैर, Policy Sentry क्रियाओं, संसाधनों और शर्तों की कुंजियाँ पर AWS दस्तावेज़ीकरण का लाभ उठाकर क्रियाओं, एक्सेस स्तरों और संसाधन प्रकारों को देखता है, और ARNs और एक्सेस स्तरों के अनुसार नीतियां उत्पन्न करता है। नीचे दी गई तालिका स्निपेट पर विचार करें:
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: ''
# संसाधन ARNs निर्दिष्ट करें
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
{
"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"
]
}
]
}
ध्यान दें कि उपरोक्त नीति उपयोगकर्ता द्वारा आपूर्ति किए गए ARNs और अनुरोधित एक्सेस स्तर को कैसे पहचानती है। उदाहरण के लिए, SID SecretsmanagerTaggingSecret में केवल गुप्त संसाधन प्रकार को सौंपी गई टैगिंग क्रियाएँ शामिल हैं।
यह IAM नीतियों को विकसित करने के समय को तेजी से बढ़ाता है, और यह सुनिश्चित करता है कि बनाई गई सभी नीतियाँ आपकी भूमिका को आवश्यकतानुसार सटीक रूप से सीमित करती हैं। इस तरह, डेवलपर्स को केवल उन संसाधनों को निर्धारित करना होता है जिन तक उन्हें पहुँच की आवश्यकता है, और हम IAM नीतियों की जटिलता को उनकी विकास प्रक्रियाओं से दूर करते हैं।
# पहले टेम्पलेट बनाएँ!!! इस तरह आपको 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
###############
# क्रियाएँ तालिका
###############
# नोट: आउटपुट प्रारूप बदलने के लिए --fmt yaml या --fmt json का उपयोग करें। क्वेरी करने के लिए डिफ़ॉल्ट json है
# उन क्रियाओं की सूची प्राप्त करें जो संसाधन बाधाओं का समर्थन नहीं करतीं
policy_sentry query action-table --service s3 --resource-type "*" --fmt yaml
# S3 में "Write" स्तर पर उन क्रियाओं की सूची प्राप्त करें जो संसाधन बाधाओं का समर्थन नहीं करतीं
policy_sentry query action-table --service s3 --access-level write --resource-type "*" --fmt yaml
# सभी सेवाओं में सभी IAM क्रियाओं की सूची प्राप्त करें जिनमें "Permissions management" एक्सेस है
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 क्रियाओं की सूची प्राप्त करें जिनमें Permissions management एक्सेस स्तर है।
policy_sentry query action-table --service ram --access-level permissions-management
# SES सेवा के अंतर्गत सभी IAM क्रियाओं की सूची प्राप्त करें जो `ses:FeedbackAddress` शर्त कुंजी का समर्थन करती हैं।
policy_sentry query action-table --service ses --condition ses:FeedbackAddress
###########
# ARN तालिका
###########
# SSM सेवा के माध्यम से उपलब्ध सभी कच्चे ARN प्रारूपों की सूची प्राप्त करें।
policy_sentry query arn-table --service ssm
# `cloud9` ARN का कच्चा ARN प्रारूप प्राप्त करें जिसका छोटा नाम `environment` है
policy_sentry query arn-table --service cloud9 --name environment
# सभी कच्चे 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
# policy_sentry कॉन्फ़िग फ़ोल्डर को आरंभ करें और IAM डेटाबेस तालिकाएँ बनाएँ।
policy_sentry initialize
# AWS दस्तावेज़ीकरण का नवीनतम संस्करण प्राप्त करें ताकि आप नई सेवाओं के साथ प्रयोग कर सकें।
policy_sentry initialize --fetch
# अपने स्वयं के एक्सेस स्तर निर्दिष्ट करके एक्सेस स्तरों को ओवरराइड करें (उदाहरण: Permissions management स्तरों को सही करना)
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 फ़ाइल का लाभ उठाएं
query: IAM डेटाबेस तालिकाओं को क्वेरी करें। यह Policy Sentry टेम्पलेट भरते समय, या त्वरित ज्ञान के लिए डेटाबेस क्वेरी करते समय मदद कर सकता है।
action-table)arn-table)condition-table)initialize: (वैकल्पिक)। एक SQLite डेटाबेस बनाएं जिसमें क्रियाओं, संसाधनों और शर्तों की कुंजियाँ दस्तावेज़ीकरण के माध्यम से उपलब्ध सभी सेवाएँ शामिल हों। देखें।
यदि आप अपना स्वयं का Python कोड विकसित कर रहे हैं और Policy Sentry को तृतीय-पक्ष पैकेज के रूप में आयात करना चाहते हैं, तो आप आरंभीकरण को छोड़ सकते हैं और Python पैकेज के साथ बंडल किए गए स्थानीय डेटाबेस फ़ाइल का लाभ उठा सकते हैं।
यह विशेष रूप से उन डेवलपर्स के लिए उपयोगी है जो Policy Sentry की उन क्षमताओं का लाभ उठाना चाहते हैं जिनमें IAM डेटाबेस के उपयोग की आवश्यकता होती है (जैसे IAM डेटाबेस तालिका को क्वेरी करना)। इस तरह, आपको डेटाबेस को आरंभ करने की आवश्यकता नहीं है और तुरंत क्वेरी कर सकते हैं।
कोड उदाहरण यहाँ स्थित है। यह नीचे भी दिखाया गया है।
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()
परिणाम इस तरह दिखेंगे:
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
यदि आप Python के साथ स्क्रिप्ट स्थापित करने के बजाय Docker का उपयोग करना पसंद करते हैं, तो हम इसका भी समर्थन करते हैं। रिपॉजिटरी की जड़ से, Docker इमेज बनाने के लिए इसका उपयोग करें:
docker build -t kmcquade/policy_sentry .
कुछ बुनियादी कमांड चलाने के लिए इसका उपयोग करें:
# बिना तर्क के बुनियादी कमांड
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 विधि का उपयोग कर रहे हैं, तो इसे यहाँ आज़माएँ:
# 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 मॉड्यूल यहाँ प्रकाशित और अनुरक्षित है।
| क्रियाएँ | एक्सेस स्तर | संसाधन प्रकार |
|---|---|---|
| ssm:GetParameter | पढ़ें | पैरामीटर |
| ssm:DescribeParameters | सूची | पैरामीटर |
| ssm:PutParameter | लिखें | पैरामीटर |
| secretsmanager:PutResourcePolicy | अनुमतियाँ प्रबंधन | गुप्त |
| secretsmanager:TagResource | टैगिंग | गुप्त |