Ausgabe
Gibt es in AWS IAM eine Möglichkeit, entweder durch Skripting oder in der Webkonsole herauszufinden, welche vorhandenen Richtlinien eine bestimmte Aktion enthalten?
Beispielsweise möchte ich der Rolle myRole
den Zugriff auf die DescribeTags -Aktion auf allen meinen EC2-Instances erlauben. Ich weiß, dass ich meine eigene Richtlinie mit einer entsprechenden Regel erstellen kann, möchte aber eine vorhandene Amazon-Richtlinie verwenden, falls eine solche existiert.
Lösung
Dies ist ein alter Beitrag, aber er kann jemandem helfen … Ungeachtet dessen, was andere gesagt haben, können Sie dies tun. Es erfordert nur ein wenig Skripting.
Mit der AWS CLI können Sie Folgendes tun.
-
Rufen Sie die ARNs der Richtlinien ab und speichern Sie sie im
policies_arn
Array.mapfile -t policies_arn < <(aws iam list-policies --query 'Policies[*].[Arn]' --output text)
-
Rufen Sie die VersionIds für jede Richtlinie ab und speichern Sie sie im
policies_ver
Array.mapfile -t policies_ver < <(aws iam list-policies --query 'Policies[*].[DefaultVersionId]' --output text)
-
Verwenden Sie eine for-Schleife, um jede Richtlinie zu durchlaufen und das Richtliniendokument darin zu speichern
policies.txt
for (( i=0; i<${#policies_arn[@]}; i++ )); do echo ${policies_arn[i]} >> policies.txt && aws iam get-policy-version --policy-arn ${policies_arn[i]} --version-id ${policies_ver[i]} --output json >> policies.txt; done
-
Öffnen
policies.txt
Sie in einem Texteditor und suchen Sie nach Ihrer Aktion.
Hinweis: Abhängig von Ihrer CLI-Konfiguration benötigen Sie den --output text
Parameter möglicherweise nicht. Die Ausgabe muss jedoch Text (nicht JSON) sein, damit dies funktioniert.
Von dort aus können Sie das .sh
ganz einfach in ein Shell-Skript umwandeln.
Beispielausgabe:
arn:aws:iam::123456789012:policy/DenyAllAccess
{
"PolicyVersion": {
"CreateDate": "2016-12-06T18:40:51Z",
"VersionId": "v1",
"Document": {
"Statement": [
{
"Action": "*",
"Effect": "Deny",
"Resource": "*"
}
],
"Version": "2012-10-17"
},
"IsDefaultVersion": true
}
}
Prost!
Beantwortet von – Sathed
Antwort geprüft von – Terry (FixError Volunteer)