기본적으로 사용자 및 역할에는 CloudFormation 리소스를 생성하거나 수정할 수 있는 권한이 없습니다. 또한 AWS Management Console, AWS Command Line Interface(AWS CLI) 또는 AWS API를 사용해 태스크를 수행할 수 없습니다. 사용자에게 사용자가 필요한 리소스에서 작업을 수행할 권한을 부여하려면 IAM 관리자가 IAM 정책을 생성하면 됩니다. 그런 다음 관리자가 IAM 정책을 역할에 추가하고, 사용자가 역할을 맡을 수 있습니다. 자세한 내용은 CloudFormation에 대한 IAM ID 기반 정책 정의 단원을 참조하십시오.
다음 예제에서는 하나 이상의 CloudFormation 작업을 사용하는 권한을 허용하거나 거부하는 데 사용할 수 있는 정책 설명을 보여줍니다.
주제
특정 템플릿 URL 요구
다음 정책에서는
템플릿 URL을 통해서만 스택을 생성하거나 업데이트하는 권한을 부여합니다.https://s3.amazonaws.com/amzn-s3-demo-bucket/test.template
{
"Version":"2012-10-17",
"Statement":[
{
"Effect" : "Allow",
"Action" : [ "cloudformation:CreateStack", "cloudformation:UpdateStack" ],
"Resource" : "*",
"Condition" : {
"StringEquals" : {
"cloudformation:TemplateUrl" : [ "https://s3.amazonaws.com/amzn-s3-demo-bucket/test.template"
]
}
}
}
]
}
모든 CloudFormation 가져오기 작업 거부
다음 정책에서는 가져오기 작업을 제외한 모든 CloudFormation 작업을 완료하는 권한을 부여합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAllStackOperations",
"Effect": "Allow",
"Action": "cloudformation:*",
"Resource": "*"
},
{
"Sid": "DenyImport",
"Effect": "Deny",
"Action": "cloudformation:*",
"Resource": "*",
"Condition": {
"ForAnyValue:StringLike": {
"cloudformation:ImportResourceTypes": [
"*"
]
}
}
}
]
}
특정 리소스 유형에 대한 가져오기 작업 허용
다음 정책에서는 오직 지정된 리소스에서의 가져오기 작업(이 예제에서 AWS::S3::Bucket
)을 비롯해 모든 스택 작업에 대한 권한을 부여합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowImport",
"Effect": "Allow",
"Action": "cloudformation:*",
"Resource": "*"
"Condition": {
"ForAllValues:StringEqualsIgnoreCase": {
"cloudformation:ImportResourceTypes": [
"AWS::S3::Bucket"
]
}
}
}
]
}
스택 템플릿에서 IAM 리소스 거부
다음 정책에서는 스택 생성 권한을 부여하지만, 스택의 템플릿에 IAM 서비스의 리소스가 포함된 경우 요청을 거부합니다. 또한 정책을 통해 사용자에게 ResourceTypes
파라미터를 지정하도록 요구합니다. 이 파라미터는 AWS CLI 및 API 요청에만 사용할 수 있습니다. 이 정책은 명시적 거부문을 사용하므로 다른 정책에서 추가 권한을 부여하더라도 이 정책은 항상 적용됩니다(명시적 거부문이 명시적 허용문보다 항상 우선).
{
"Version":"2012-10-17",
"Statement":[
{
"Effect" : "Allow",
"Action" : [ "cloudformation:CreateStack" ],
"Resource" : "*"
},
{
"Effect" : "Deny",
"Action" : [ "cloudformation:CreateStack" ],
"Resource" : "*",
"Condition" : {
"ForAnyValue:StringLikeIfExists" : {
"cloudformation:ResourceTypes" : [ "AWS::IAM::*" ]
}
}
},
{
"Effect": "Deny",
"Action" : [ "cloudformation:CreateStack" ],
"Resource": "*",
"Condition": {
"Null": {
"cloudformation:ResourceTypes": "true"
}
}
}
]
}
특정 리소스 유형으로 스택 생성 허용
다음 정책은 이전 예제와 비슷합니다. 이 정책에서는 스택의 템플릿에 IAM 서비스의 리소스가 포함되지 않은 경우 스택을 생성하는 권한을 부여합니다. 또한 사용자에게 ResourceTypes
파라미터를 지정하도록 요구합니다. 이 파라미터는 AWS CLI 및 API 요청에 대해서만 사용할 수 있습니다. 이 정책은 더 간단하지만 명시적 거부문을 사용하지 않습니다. 추가적인 권한을 부여하는 다른 정책에서 이 정책을 재정의할 수 있습니다.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect" : "Allow",
"Action" : [ "cloudformation:CreateStack" ],
"Resource" : "*",
"Condition" : {
"ForAllValues:StringNotLikeIfExists" : {
"cloudformation:ResourceTypes" : [ "AWS::IAM::*" ]
},
"Null":{
"cloudformation:ResourceTypes": "false"
}
}
}
]
}
리소스 변경 API 작업을 기반으로 액세스 제어
다음 정책에서는 리소스 변경 API 작업의 이름을 기준으로 액세스를 필터링하는 권한을 부여합니다. 이 정책은 IAM 사용자가 스택 또는 스택 세트에서 태그를 추가하거나 제거하는 데 사용할 수 있는 API를 제어하는 데 사용됩니다. 태그를 추가하거나 제거하는 데 사용되는 작업은 조건 키의 값으로 추가해야 합니다. 다음 정책은 변경 작업 CreateStack
에 TagResource
및 UntagResource
권한을 부여합니다.
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "CreateActionConditionPolicyForTagUntagResources",
"Effect": "Allow",
"Action": [
"cloudformation:TagResource",
"cloudformation:UntagResource"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"cloudformation:CreateAction": [
"CreateStack"
]
}
}
}]
}
리전 및 리소스 유형을 기반으로 스택 세트 작업 제한
다음 정책에서는 서비스 관리형 스택 세트 권한을 부여합니다. 이 정책을 적용 받는 사용자는 Amazon S3 리소스 유형(AWS::S3::*
) 또는 AWS::SES::ConfigurationSet
리소스 유형을 포함하는 템플릿으로만 스택 세트 작업을 수행할 수 있습니다. ID 123456789012
로 조직 관리 계정에 로그인한 경우 사용자는 ID가
인 OU를 대상으로 하는 스택 세트에 대해서만 작업을 수행할 수 있고, ID가 ou-1fsfsrsdsfrewr
인 AWS 계정을 대상으로 하는 ID 987654321012
stack-set-id
의 스택 세트에 대해서만 작업을 수행할 수 있습니다.
스택 세트 템플릿에 정책에 지정된 리소스 유형이 아닌 다른 리소스 유형이 포함되어 있거나, 배포 대상이 해당 관리 계정 및 스택 세트 정책에 지정되지 않은 OU 또는 계정 ID인 경우 스택 세트 작업이 실패합니다.
이러한 정책 제한은 스택 세트 작업이 us-east-1
, us-west-2
또는 eu-west-2
AWS 리전를 대상으로 하는 경우에만 적용됩니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:*"
],
"Resource": [
"arn:aws:cloudformation:*:*:stackset/*",
"arn:aws:cloudformation:*:*:type/resource/AWS-S3
-*",
"arn:aws:cloudformation:us-west-2::type/resource/AWS-SES-ConfigurationSet
",
"arn:aws:cloudformation:*:123456789012
:stackset-target/*/ou-1fsfsrsdsfrewr
",
"arn:aws:cloudformation:*:123456789012
:stackset-target/stack-set-id
/987654321012
"
],
"Condition": {
"ForAllValues:StringEqualsIgnoreCase": {
"cloudformation:TargetRegion": [
"us-east-1
",
"us-west-2
",
"eu-west-1
"
]
}
}
}
]
}
모든 IaC 생성기 작업 허용
다음 정책에서는 IaC 생성기 리소스 스캔 및 템플릿 관리와 관련된 CloudFormation 작업에 대한 액세스를 허용합니다. 첫 번째 명령문은 리소스 스캔을 설명, 나열 및 시작하는 권한을 부여합니다. 또한 IaC 생성기가 리소스 및 사용 가능한 리소스 유형에 대한 정보를 검색할 수 있는 추가 필수 권한(cloudformation:GetResource
, cloudformation:ListResources
, cloudformation:ListTypes
)에 대한 액세스를 허용합니다. 두 번째 명령문은 생성된 템플릿을 생성, 삭제, 설명, 나열 및 업데이트할 수 있는 모든 권한을 부여합니다.
또한 IaC 생성기로 리소스를 스캔할 모든 사용자에게 대상 AWS 서비스에 대한 읽기 권한을 부여해야 합니다. 자세한 내용은 리소스 스캔에 필요한 IAM 권한 단원을 참조하십시오.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"ResourceScanningOperations",
"Effect":"Allow",
"Action":[
"cloudformation:DescribeResourceScan",
"cloudformation:GetResource",
"cloudformation:ListResources",
"cloudformation:ListResourceScanRelatedResources",
"cloudformation:ListResourceScanResources",
"cloudformation:ListResourceScans",
"cloudformation:ListTypes",
"cloudformation:StartResourceScan"
],
"Resource":"*"
},
{
"Sid":"TemplateGeneration",
"Effect":"Allow",
"Action":[
"cloudformation:CreateGeneratedTemplate",
"cloudformation:DeleteGeneratedTemplate",
"cloudformation:DescribeGeneratedTemplate",
"cloudformation:GetResource",
"cloudformation:GetGeneratedTemplate",
"cloudformation:ListGeneratedTemplates",
"cloudformation:UpdateGeneratedTemplate"
],
"Resource":"*"
}
]
}