Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS Identity and Access Management cuplikan template
Bagian ini berisi cuplikan AWS Identity and Access Management template.
Topik
penting
Saat membuat atau memperbarui tumpukan menggunakan templat yang berisi sumber daya IAM, Anda harus mengakui penggunaan kemampuan IAM. Untuk informasi selengkapnya, lihat Mengakui sumber daya IAM dalam templat CloudFormation.
Mendeklarasikan sumber daya pengguna IAM
Cuplikan ini menunjukkan cara mendeklarasikan sebuah sumber daya AWS::IAM::User untuk membuat pengguna IAM. Pengguna dinyatakan dengan jalur ("/") dan profil login dengan kata sandi (myP@ssW0rd).
Dokumen kebijakan bernama giveaccesstoqueueonly memberikan izin kepada pengguna untuk melakukan semua tindakan Amazon SQS pada sumber daya antrian Amazon SQS, dan menolak akses ke semua myqueue sumber daya antrian Amazon SQS lainnya. Fungsi Fn::GetAtt mengambil atribut Arn dari myqueue sumber daya AWS::SQS::Queue.
Dokumen kebijakan bernama giveaccesstotopiconly ditambahkan ke pengguna untuk memberikan izin kepada pengguna untuk melakukan semua tindakan Amazon SNS pada mytopic sumber daya topik Amazon SNS dan untuk menolak akses ke semua sumber daya Amazon SNS lainnya. Fungsi Ref mengambil ARN dari mytopic sumber daya AWS::SNS::Topic.
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
Mendeklarasikan sumber daya kunci akses IAM
Cuplikan ini menunjukkan sumber daya AWS::IAM::AccessKey. Sumber daya myaccesskey membuat access key dan menetapkannya ke pengguna IAM yang dinyatakan sebagai sumber daya AWS::IAM::User dalam templat.
JSON
"myaccesskey" : { "Type" : "AWS::IAM::AccessKey", "Properties" : { "UserName" : { "Ref" : "myuser" } } }
YAML
myaccesskey: Type: AWS::IAM::AccessKey Properties: UserName: !Ref myuser
Anda bisa mendapatkan kunci rahasia untuk sumber daya AWS::IAM::AccessKey menggunakan fungsi Fn::GetAtt. Salah satu cara untuk mengambil kunci rahasia adalah dengan memasukkannya ke dalam nilai Output. Anda bisa mendapatkan access key menggunakan fungsi Ref. Deklarasi nilai Output berikut mendapatkan access key dan kunci rahasia untuk myaccesskey.
JSON
"AccessKeyformyaccesskey" : { "Value" : { "Ref" : "myaccesskey" } }, "SecretKeyformyaccesskey" : { "Value" : { "Fn::GetAtt" : [ "myaccesskey", "SecretAccessKey" ] } }
YAML
AccessKeyformyaccesskey: Value: !Ref myaccesskey SecretKeyformyaccesskey: Value: !GetAtt myaccesskey.SecretAccessKey
Anda juga dapat meneruskan kunci AWS akses dan kunci rahasia ke EC2 instans Amazon atau grup Auto Scaling yang ditentukan dalam template. Deklarasi berikut AWS::EC2::Instance menggunakan properti UserData untuk meneruskan access key dan kunci rahasia untuk sumber daya myaccesskey.
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}"
Mendeklarasikan sumber daya grup IAM
Cuplikan ini menunjukkan sumber daya AWS::IAM::Group. Grup ini memiliki jalur ("/myapplication/"). Dokumen kebijakan bernama myapppolicy ditambahkan ke grup untuk memungkinkan pengguna grup melakukan semua tindakan Amazon SQS pada myqueue sumber daya antrian Amazon SQS dan menolak akses ke semua resource Amazon SQS lainnya kecuali. myqueue
Untuk menetapkan kebijakan pada sumber daya, IAM memerlukan Amazon Resource Name (ARN) untuk sumber daya tersebut. Dalam cuplikan, fungsi Fn::GetAtt mendapat ARN dari antrean sumber daya AWS::SQS::Queue.
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
Menambahkan pengguna ke grup
Sumber daya AWS::IAM::UserToGroupAddition menambahkan pengguna ke grup. Pada potongan berikut, sumber daya addUserToGroup menambahkan pengguna berikut ke grup yang ada bernama myexistinggroup2: pengguna yang ada existinguser1 dan pengguna myuser yang dinyatakan sebagai sumber daya AWS::IAM::User dalam templat.
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
Mendeklarasikan kebijakan IAM
Cuplikan ini menunjukkan cara membuat kebijakan dan menerapkannya ke beberapa grup menggunakan sumber daya AWS::IAM::Policy bernama mypolicy. Sumber daya mypolicy berisi properti PolicyDocument yang memungkinkan tindakan GetObject, PutObject, dan PutObjectAcl pada objek dalam bucket S3 yang diwakili oleh arn:aws:s3:::myAWSBucket ARN. mypolicySumber daya menerapkan kebijakan ke grup yang ada bernama myexistinggroup1 dan grup mygroup yang dideklarasikan dalam templat sebagai AWS::IAM::Groupsumber daya. Contoh ini menunjukkan cara menerapkan kebijakan ke grup yang menggunakan properti Groups; Namun, Anda juga dapat menggunakan properti Users untuk menambahkan dokumen kebijakan ke daftar pengguna.
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
Mendeklarasikan kebijakan bucket Amazon S3
Cuplikan ini menunjukkan cara membuat kebijakan dan menerapkannya ke bucket Amazon S3 menggunakan sumber daya. AWS::S3::BucketPolicy mybucketpolicySumber daya mendeklarasikan dokumen kebijakan yang memungkinkan pengguna user1 IAM untuk melakukan GetObject tindakan pada semua objek dalam bucket S3 tempat kebijakan ini diterapkan. Dalam cuplikan, fungsi Fn::GetAtt mengambil ARN dari sumber daya user1. Sumber daya mybucketpolicy menerapkan kebijakan untuk my bucket sumber daya AWS::S3::BucketPolicy. Fungsi Ref mengambil nama bucket dari sumber daya mybucket.
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
Mendeklarasikan kebijakan topik Amazon SNS
Cuplikan ini menunjukkan cara membuat kebijakan dan menerapkannya ke topik Amazon SNS menggunakan sumber daya. AWS::SNS::TopicPolicy Sumber daya mysnspolicy berisi properti PolicyDocument yang memungkinkan myuser sumber daya AWS::IAM::User untuk melakukan tindakan Publish pada mytopic sumber daya AWS::SNS::Topic. Dalam cuplikan, fungsi Fn::GetAtt mendapat ARN untuk sumber daya myuser dan fungsi Ref mendapat ARN untuk sumber daya mytopic.
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
Mendeklarasikan kebijakan Amazon SQS
Cuplikan ini menunjukkan cara membuat kebijakan dan menerapkannya ke antrian Amazon SQS menggunakan sumber daya. AWS::SQS::QueuePolicy Properti PolicyDocument memungkinkan pengguna yang ada myapp (ditentukan oleh ARN nya) untuk melakukan tindakan SendMessage pada antrian yang sudah ada, yang ditentukan oleh URL-nya, dan myqueue sumber daya AWS::SQS::Queue. Fungsi Ref mendapat URL untuk sumber daya myqueue.
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
Contoh templat IAM role
Bagian ini memberikan contoh CloudFormation template untuk peran IAM untuk EC2 instance.
Untuk informasi selengkapnya, lihat peran IAM untuk Amazon EC2 di Panduan EC2 Pengguna Amazon.
Peran IAM dengan EC2
Dalam contoh ini, profil instance direferensikan oleh IamInstanceProfile properti EC2 instance. Kebijakan instans dan referensi kebijakan peran 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
Peran IAM dengan grup Auto Scaling
Dalam contoh ini, profil instance direferensikan oleh IamInstanceProfile properti konfigurasi peluncuran Amazon EC2 Auto Scaling.
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