AWS Identity and Access Management-Vorlagenausschnitte
Dieser Abschnitt enthält Codeausschnitte für AWS Identity and Access Management-Vorlagen.
Themen
Wichtig
Beim Erstellen oder Aktualisieren eines Stacks anhand einer Vorlage, die IAM-Ressourcen enthält, müssen Sie die Verwendung von IAM-Funktionen bestätigen. Weitere Informationen finden Sie unter Erkennen von IAM-Ressourcen in CloudFormation-Vorlagen.
Deklarieren einer IAM-Benutzerressource
Dieser Ausschnitt zeigt, wie Sie eine AWS::IAM::User-Ressource deklarieren, um einen IAM-Benutzer zu erstellen. Der Benutzer wird mit dem Pfad ("/") und einem Anmeldungsprofil mit dem Passwort (myP@ssW0rd) deklariert.
Im Richtliniendokument namens giveaccesstoqueueonly erhält der Benutzer die Berechtigung zum Ausführen aller Amazon SQS-Aktionen auf der Amazon SQS-Warteschlangenressource myqueue. Der Zugriff auf alle anderen Amazon SQS-Warteschlangenressourcen wird verweigert. Die Funktion Fn::GetAtt erhält das Attribut Arn der Ressource AWS::SQS::Queue myqueue.
Das Richtliniendokument namens giveaccesstotopiconly wird dem Benutzer hinzugefügt, um ihm die Berechtigung zum Ausführen aller Amazon SNS-Aktionen auf der Amazon SNS-Themenressource mytopic zu erteilen und den Zugriff auf alle anderen Amazon SNS-Ressourcen zu verweigern. Die RefAWS::SNS::Topic-Funktion ruft das ARN-Attribut der -Ressource mytopic ab.
JSON
"myuser" : { "Type" : "AWS::IAM::User", "Properties" : { "Path" : "/", "LoginProfile" : { "Password" : "myP@ssW0rd" }, "Policies" : [ { "PolicyName" : "giveaccesstoqueueonly", "PolicyDocument" : { "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "sqs:*" ], "Resource" : [ { "Fn::GetAtt" : [ "myqueue", "Arn" ] } ] }, { "Effect" : "Deny", "Action" : [ "sqs:*" ], "NotResource" : [ { "Fn::GetAtt" : [ "myqueue", "Arn" ] } ] } ] } }, { "PolicyName" : "giveaccesstotopiconly", "PolicyDocument" : { "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "sns:*" ], "Resource" : [ { "Ref" : "mytopic" } ] }, { "Effect" : "Deny", "Action" : [ "sns:*" ], "NotResource" : [ { "Ref" : "mytopic" } ] } ] } } ] } }
YAML
myuser: Type: AWS::IAM::User Properties: Path: "/" LoginProfile: Password: myP@ssW0rd Policies: - PolicyName: giveaccesstoqueueonly PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - sqs:* Resource: - !GetAtt myqueue.Arn - Effect: Deny Action: - sqs:* NotResource: - !GetAtt myqueue.Arn - PolicyName: giveaccesstotopiconly PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - sns:* Resource: - !Ref mytopic - Effect: Deny Action: - sns:* NotResource: - !Ref mytopic
Deklarieren einer IAM-Zugriffsschlüssel-Ressource
Dieser Ausschnitt zeigt eine AWS::IAM::AccessKey Ressource. Die Ressource myaccesskey erstellt einen Zugriffsschlüssel und weist ihn einem IAM-Benutzer zu, der in der Vorlage als Ressource AWS::IAM::User deklariert ist.
JSON
"myaccesskey" : { "Type" : "AWS::IAM::AccessKey", "Properties" : { "UserName" : { "Ref" : "myuser" } } }
YAML
myaccesskey: Type: AWS::IAM::AccessKey Properties: UserName: !Ref myuser
Sie können den geheimen Schlüssel für eine AWS::IAM::AccessKey-Ressource mithilfe der Fn::GetAtt-Funktion abrufen. Eine Möglichkeit zum Abrufen des geheimen Schlüssels besteht darin, ihn in einen Output-Wert zu setzen. Sie können den Zugriffsschlüssel mit der Ref-Funktion abrufen. Die folgenden Output-Wertdeklarationen rufen den Zugriffsschlüssel und den geheimen Schlüssel für myaccesskey ab.
JSON
"AccessKeyformyaccesskey" : { "Value" : { "Ref" : "myaccesskey" } }, "SecretKeyformyaccesskey" : { "Value" : { "Fn::GetAtt" : [ "myaccesskey", "SecretAccessKey" ] } }
YAML
AccessKeyformyaccesskey: Value: !Ref myaccesskey SecretKeyformyaccesskey: Value: !GetAtt myaccesskey.SecretAccessKey
Sie können den AWS-Zugriffsschlüssel und den geheimen Schlüssel auch an eine Amazon-EC2-Instance oder Auto-Scaling-Gruppe übergeben, die in der Vorlage definiert ist. Die folgende AWS::EC2::Instance-Deklaration verwendet die UserData-Eigenschaft, um den Zugriffsschlüssel und den geheimen Schlüssel für die myaccesskey-Ressource zu übergeben.
JSON
"myinstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "AvailabilityZone" : "us-east-1a", "ImageId" : "ami-0ff8a91507f77f867", "UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [ "ACCESS_KEY=", { "Ref" : "myaccesskey" }, "&", "SECRET_KEY=", { "Fn::GetAtt" : [ "myaccesskey", "SecretAccessKey" ] } ] ] } } } }
YAML
myinstance: Type: AWS::EC2::Instance Properties: AvailabilityZone: "us-east-1a" ImageId: ami-0ff8a91507f77f867 UserData: Fn::Base64: !Sub "ACCESS_KEY=${myaccesskey}&SECRET_KEY=${myaccesskey.SecretAccessKey}"
Deklarieren einer IAM-Gruppenressource
Dieser Ausschnitt zeigt eine AWS::IAM::Group Ressource. Die Gruppe hat einen Pfad ("/myapplication/"). Das Richtliniendokument namens myapppolicy wird der Gruppe hinzugefügt, um den Benutzern der Gruppe die Berechtigung zum Ausführen aller Amazon SQS-Aktionen auf der Amazon SQS-Warteschlangenressource "myqueue" zu erteilen und den Zugriff auf alle anderen Amazon SQS-Ressourcen außer myqueue zu verweigern.
Zum Zuweisen einer Richtlinie zu einer Ressource benötigt IAM den Amazon-Ressourcennamen (ARN) für die Ressource. In dem Ausschnitt ruft die Funktion Fn::GetAtt den ARN der Ressourcenwarteschlange AWS::SQS::Queue ab.
JSON
"mygroup" : { "Type" : "AWS::IAM::Group", "Properties" : { "Path" : "/myapplication/", "Policies" : [ { "PolicyName" : "myapppolicy", "PolicyDocument" : { "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "sqs:*" ], "Resource" : [ { "Fn::GetAtt" : [ "myqueue", "Arn" ] } ] }, { "Effect" : "Deny", "Action" : [ "sqs:*" ], "NotResource" : [ { "Fn::GetAtt" : [ "myqueue", "Arn" ] } ] } ] } } ] } }
YAML
mygroup: Type: AWS::IAM::Group Properties: Path: "/myapplication/" Policies: - PolicyName: myapppolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - sqs:* Resource: !GetAtt myqueue.Arn - Effect: Deny Action: - sqs:* NotResource: !GetAtt myqueue.Arn
Hinzufügen von Benutzern zu einer Gruppe
Die Ressource AWS::IAM::UserToGroupAddition fügt Benutzer zu einer Gruppe hinzu. Im folgenden Ausschnitt fügt die Ressource addUserToGroup die folgenden Benutzer zu einer bestehenden Gruppe namens myexistinggroup2hinzu: den bestehenden Benutzer existinguser1 und den Benutzer myuser, der in der Vorlage als Ressource AWS::IAM::User deklariert ist.
JSON
"addUserToGroup" : { "Type" : "AWS::IAM::UserToGroupAddition", "Properties" : { "GroupName" : "myexistinggroup2", "Users" : [ "existinguser1", { "Ref" : "myuser" } ] } }
YAML
addUserToGroup: Type: AWS::IAM::UserToGroupAddition Properties: GroupName: myexistinggroup2 Users: - existinguser1 - !Ref myuser
Deklarieren einer IAM-Richtlinie
Dieser Ausschnitt zeigt, wie Sie eine Richtlinie erstellen und sie auf mehrere Gruppen anwenden, indem Sie eine Ressource mit dem Namen AWS::IAM::Policy mypolicy verwenden. Die mypolicy-Ressource enthält eine PolicyDocument-Eigenschaft, die GetObject-, PutObject- und PutObjectAcl-Aktionen für die Objekte in dem durch den ARN arn:aws:s3:::myAWSBucket repräsentierten S3-Bucket zulässt. Die Ressource mypolicy wendet die Richtlinie auf eine bestehende Gruppe namens myexistinggroup1 und eine Gruppe mygroup an, die in der Vorlage als Ressource AWS::IAM::Group deklariert ist. Dieses Beispiel zeigt, wie eine Richtlinie mithilfe der Groups-Eigenschaft auf eine Gruppe angewendet wird. Sie können jedoch auch die Users-Eigenschaft verwenden, um einer Liste von Benutzern ein Richtliniendokument hinzuzufügen.
JSON
"mypolicy" : { "Type" : "AWS::IAM::Policy", "Properties" : { "PolicyName" : "mygrouppolicy", "PolicyDocument" : { "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "s3:GetObject" , "s3:PutObject" , "s3:PutObjectAcl" ], "Resource" : "arn:aws:s3:::myAWSBucket/*" } ] }, "Groups" : [ "myexistinggroup1", { "Ref" : "mygroup" } ] } }
YAML
mypolicy: Type: AWS::IAM::Policy Properties: PolicyName: mygrouppolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - s3:GetObject - s3:PutObject - s3:PutObjectAcl Resource: arn:aws:s3:::myAWSBucket/* Groups: - myexistinggroup1 - !Ref mygroup
Deklarieren einer Amazon S3-Bucket-Richtlinie
Dieser Ausschnitt zeigt, wie Sie eine Richtlinie erstellen und sie auf einen Amazon S3-Bucket anwenden, indem Sie die Ressource AWS::S3::BucketPolicy verwenden. Die mybucketpolicy-Ressource deklariert ein Richtliniendokument, das dem user1-Benutzer IAM erlaubt, die GetObject-Aktion auf alle Objekte in dem S3-Bucket auszuführen, auf den die Richtlinie angewendet wird. In dem Codebeispiel ruft die Fn::GetAtt-Funktion den ARN der user1-Ressource ab. Die mybucketpolicy-Ressource wendet die Richtlinie auf die AWS::S3::BucketPolicy-Ressource mybucket an. Die Ref-Funktion ruft den Bucket-Namen der mybucket-Ressource ab.
JSON
"mybucketpolicy" : { "Type" : "AWS::S3::BucketPolicy", "Properties" : { "PolicyDocument" : { "Id" : "MyPolicy", "Version": "2012-10-17", "Statement" : [ { "Sid" : "ReadAccess", "Action" : [ "s3:GetObject" ], "Effect" : "Allow", "Resource" : { "Fn::Join" : [ "", [ "arn:aws:s3:::", { "Ref" : "mybucket" } , "/*" ] ] }, "Principal" : { "AWS" : { "Fn::GetAtt" : [ "user1", "Arn" ] } } } ] }, "Bucket" : { "Ref" : "mybucket" } } }
YAML
mybucketpolicy: Type: AWS::S3::BucketPolicy Properties: PolicyDocument: Id: MyPolicy Version: '2012-10-17' Statement: - Sid: ReadAccess Action: - s3:GetObject Effect: Allow Resource: !Sub "arn:aws:s3:::${mybucket}/*" Principal: AWS: !GetAtt user1.Arn Bucket: !Ref mybucket
Deklarieren einer Amazon SNS-Themenrichtlinie
Dieser Ausschnitt zeigt, wie Sie eine Richtlinie erstellen und sie mithilfe der Ressource AWS::SNS::TopicPolicy auf ein Amazon SNS-Thema anwenden. Die mysnspolicy-Ressource enthält eine PolicyDocument-Eigenschaft, die es der AWS::IAM::User-Ressource myuser ermöglicht, die Publish-Aktion für eine AWS::SNS::Topic-Ressource mytopicdurchzuführen. In dem Codebeispiel ruft die Fn::GetAtt-Funktion den ARN für die myuser-Ressource ab und die Ref-Funktion ruft den ARN für die mytopic-Ressource ab.
JSON
"mysnspolicy" : { "Type" : "AWS::SNS::TopicPolicy", "Properties" : { "PolicyDocument" : { "Id" : "MyTopicPolicy", "Version": "2012-10-17", "Statement" : [ { "Sid" : "My-statement-id", "Effect" : "Allow", "Principal" : { "AWS" : { "Fn::GetAtt" : [ "myuser", "Arn" ] } }, "Action" : "sns:Publish", "Resource" : "*" } ] }, "Topics" : [ { "Ref" : "mytopic" } ] } }
YAML
mysnspolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: My-statement-id Effect: Allow Principal: AWS: !GetAtt myuser.Arn Action: sns:Publish Resource: "*" Topics: - !Ref mytopic
Deklarieren einer Amazon SQS-Richtlinie
Dieser Ausschnitt zeigt, wie Sie eine Richtlinie erstellen und sie mit der Ressource AWS::SQS::QueuePolicy auf eine Amazon SQS-Warteschlange anwenden. Die Eigenschaft PolicyDocument ermöglicht es dem bestehenden Benutzer myapp (angegeben durch seinen ARN), die Aktion SendMessage für eine bestehende Warteschlange, die durch ihre URL angegeben ist, und eine AWS::SQS::Queue Ressource myqueue durchzuführen. Die Ref-Funktion ruft die URL für die myqueue-Ressource ab.
JSON
"mysqspolicy" : { "Type" : "AWS::SQS::QueuePolicy", "Properties" : { "PolicyDocument" : { "Id" : "MyQueuePolicy", "Version": "2012-10-17", "Statement" : [ { "Sid" : "Allow-User-SendMessage", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::123456789012:user/myapp" }, "Action" : [ "sqs:SendMessage" ], "Resource" : "*" } ] }, "Queues" : [ "https://sqs.us-east-2aws-region.amazonaws.com/123456789012/myexistingqueue", { "Ref" : "myqueue" } ] } }
YAML
mysqspolicy: Type: AWS::SQS::QueuePolicy Properties: PolicyDocument: Id: MyQueuePolicy Version: '2012-10-17' Statement: - Sid: Allow-User-SendMessage Effect: Allow Principal: AWS: arn:aws:iam::123456789012:user/myapp Action: - sqs:SendMessage Resource: "*" Queues: - https://sqs.aws-region.amazonaws.com/123456789012/myexistingqueue - !Ref myqueue
Vorlagenbeispiele für IAM-Rollen
Dieser Abschnitt enthält CloudFormation-Vorlagenbeispiele für IAM-Rollen für EC2-Instances.
Weitere Informationen finden Sie unter IAM-Rollen für Amazon EC2 im Amazon-EC2-Benutzerhandbuch.
IAM-Rolle mit EC2
In diesem Beispiel wird das Instanceprofil durch die Eigenschaft IamInstanceProfile der EC2-Instance referenziert. Sowohl die Instance-Richtlinie als auch die Rollenrichtlinie referenzieren AWS::IAM::Role.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "myEC2Instance": { "Type": "AWS::EC2::Instance", "Version": "2009-05-15", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "m1.small", "Monitoring": "true", "DisableApiTermination": "false", "IamInstanceProfile": { "Ref": "RootInstanceProfile" } } }, "RootRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/" } }, "RolePolicies": { "Type": "AWS::IAM::Policy", "Properties": { "PolicyName": "root", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }, "Roles": [ { "Ref": "RootRole" } ] } }, "RootInstanceProfile": { "Type": "AWS::IAM::InstanceProfile", "Properties": { "Path": "/", "Roles": [ { "Ref": "RootRole" } ] } } } }
YAML
AWSTemplateFormatVersion: '2010-09-09' Resources: myEC2Instance: Type: AWS::EC2::Instance Version: '2009-05-15' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: m1.small Monitoring: 'true' DisableApiTermination: 'false' IamInstanceProfile: !Ref RootInstanceProfile RootRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - ec2.amazonaws.com Action: - sts:AssumeRole Path: "/" RolePolicies: Type: AWS::IAM::Policy Properties: PolicyName: root PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: "*" Resource: "*" Roles: - !Ref RootRole RootInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Path: "/" Roles: - !Ref RootRole
IAM-Rolle mit Auto Scaling-Gruppe
In diesem Beispiel wird das Instanceprofil durch die Eigenschaft IamInstanceProfile einer Amazon EC2 Auto Scaling Startkonfiguration referenziert.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "myLCOne": { "Type": "AWS::AutoScaling::LaunchConfiguration", "Version": "2009-05-15", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "m1.small", "InstanceMonitoring": "true", "IamInstanceProfile": { "Ref": "RootInstanceProfile" } } }, "myASGrpOne": { "Type": "AWS::AutoScaling::AutoScalingGroup", "Version": "2009-05-15", "Properties": { "AvailabilityZones": [ "us-east-1a" ], "LaunchConfigurationName": { "Ref": "myLCOne" }, "MinSize": "0", "MaxSize": "0", "HealthCheckType": "EC2", "HealthCheckGracePeriod": "120" } }, "RootRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/" } }, "RolePolicies": { "Type": "AWS::IAM::Policy", "Properties": { "PolicyName": "root", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }, "Roles": [ { "Ref": "RootRole" } ] } }, "RootInstanceProfile": { "Type": "AWS::IAM::InstanceProfile", "Properties": { "Path": "/", "Roles": [ { "Ref": "RootRole" } ] } } } }
YAML
AWSTemplateFormatVersion: '2010-09-09' Resources: myLCOne: Type: AWS::AutoScaling::LaunchConfiguration Version: '2009-05-15' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: m1.small InstanceMonitoring: 'true' IamInstanceProfile: !Ref RootInstanceProfile myASGrpOne: Type: AWS::AutoScaling::AutoScalingGroup Version: '2009-05-15' Properties: AvailabilityZones: - "us-east-1a" LaunchConfigurationName: !Ref myLCOne MinSize: '0' MaxSize: '0' HealthCheckType: EC2 HealthCheckGracePeriod: '120' RootRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - ec2.amazonaws.com Action: - sts:AssumeRole Path: "/" RolePolicies: Type: AWS::IAM::Policy Properties: PolicyName: root PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: "*" Resource: "*" Roles: - !Ref RootRole RootInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Path: "/" Roles: - !Ref RootRole