2013-12-17 2 views
15

Я работаю над созданием AWS ведра и дистрибутивами с использованием сценариев. Я создал сценарий и запустил сценарий шаблона стека в консоли формирования облаков AWS.AWS - Создание облаков Сценарий для создания ведра S3 и дистрибутива

Я создаю bucketpolicy для ведра S3, используя сценарий и канонический идентификатор. Как только я создаю политику ведра, я хочу динамически назначать его в «OriginAccessIdentity» в скрипте. Я хочу добавить идентификатор, созданный из политики ведра, в атрибуты «OriginAccessIdentity».

Как достичь этой функциональности?

Сценарий:

{ 
    "AWSTemplateFormatVersion" : "2010-09-09", 

    "Description" : "AWS CloudFormation Template S3_With_CloudFront_Distribution", 

    "Parameters" : { 
     "bucketname" : { 
      "Type" : "String", 
      "Description" : "test"   
     }, 

     "cannonicalid" : { 
      "Type" : "String", 
      "Description" : "234213523145314534523452345234523452345"  
     } 
    }, 

    "Conditions" : { 
     "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "dev"]} 
    }, 

    "Resources" : { 
     "testbucket" : { 
      "Type" : "AWS::S3::Bucket", 
      "Properties" : {  
      "BucketName" : { "Ref" : "bucketname" },   
      "WebsiteConfiguration" : { 
       "IndexDocument" : "index.html"    
      } 
      } 
     }, 


     "mybucketpolicy" : { 
      "Type" : "AWS::S3::BucketPolicy", 
      "Properties" : { 
       "PolicyDocument" : { 
       "Id" : "MyPolicy", 
       "Statement" : [ { 
        "Sid" : "Grant a CloudFront Origin Identity access to support private content", 
        "Action" : [ "s3:GetObject" ], 
        "Effect" : "Allow", 
        "Resource" : { "Fn::Join" : [ 
          "", [ "arn:aws:s3:::", { "Ref" : "testbucket" } , "/*" ] 
         ] }, 
        "Principal" : { 
         "CanonicalUser":{ "Ref" : "cannonicalid" } 
        } 
       } ] 
       }, 
       "Bucket" : { "Ref" : "testbucket" } 
       } 
     }, 


     "testdistribution" : { 
      "Type" : "AWS::CloudFront::Distribution", 
      "Properties" : { 
       "DistributionConfig" : { 
        "Origins" : [ { 
          "Id" : "S3Origin", 
          "DomainName" : { "Fn::GetAtt" : [ "testbucket", "DomainName" ] }, 
          "S3OriginConfig" : { 
           "OriginAccessIdentity" : "How to configure the id dynamically here" 
          } 
         } 
        ], 

        "Enabled" : "true", 
        "Comment" : "", 
        "DefaultRootObject" : "index.html",      
        "Aliases" : [ "test.com" ], 

        "CacheBehaviors" : [ { 
          "TargetOriginId" : "S3Origin", 
          "ForwardedValues" : { 
           "QueryString" : "false" 
          },        
          "ViewerProtocolPolicy" : "allow-all", 
          "MinTTL" : "1", 
          "PathPattern" : "resources/*.json" 
         } 
        ], 
        "DefaultCacheBehavior" : { 
         "TargetOriginId" : "S3Origin", 
         "ForwardedValues" : { 
          "QueryString" : "false" 
         },      
         "ViewerProtocolPolicy" : "allow-all", 
         "MinTTL" : "1" 
        } 
       } 
      } 
     } 
    }, 
    "Outputs" : { 
     "DistributionId" : { 
      "Description" : "CloudFront Distribution Id", 
      "Value" : { "Ref" : "testdistribution" } 
     }, 
     "DistributionName" : { 
      "Description" : "URL to access the CloudFront distribution", 
      "Value" : { "Fn::Join" : [ "", ["http://", {"Fn::GetAtt" : ["testdistribution", "DomainName"]} ]]} 
     }, 
     "S3OriginDNSName" : { 
      "Description" : "Name of S3 bucket to hold website content.", 
      "Value" : { "Fn::GetAtt" : [ "testbucket", "DomainName"] } 
     } 
    } 
} 
+0

Использование сценариев его не рекомендуется создать пользователя OAI в формировании облаков , причина, по которой может потребоваться мало времени для создания пользователя в облаке. Таким образом, мы создаем пользователя OAI с использованием кода .NET, а затем используем пользователя OAI в скрипте. Пожалуйста, дайте мне знать, если есть другое лучшее решение для создания пользователя OAI. –

+0

ссылайтесь на url для создания OAI с использованием кода .NET. http://irfanshirur.blogspot.in/2014/01/create-oai-and-canonical-user-using-net.html –

ответ

6

происхождение доступ Идентичность не может быть создана с CloudFormation. Единственным ресурсом CloudFront, доступным через Cloudformation, является ресурс AWS::CloudFront::Distribution.

Вы можете избежать жесткого кодирования ссылки на OAI в своем шаблоне, используя параметр для передачи в существующем OAI при создании вашего стека. Затем вы можете использовать этот параметр как значение для OriginAccessIdentity в S3Origin, связанном с ключом S3OriginConfig.

Это не идеальный вариант, но это позволяет сделать ваши шаблоны более универсальными.

2

С 2 ноября 2017 года CloudFormation поддерживает это с использованием ресурса AWS :: CloudFront :: CloudFrontOriginAccessIdentity.

С ресурсом идентичности доступа происхождения определяется как:

"OriginAccessId": { 
    "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", 
    "Properties": { 
     "CloudFrontOriginAccessIdentityConfig": { 
      "Comment": "MyDescription" 
     } 
    } 
} 

вы можете ссылаться на него в распределительном конфигурации с:

"OriginAccessIdentity" : { 
    "Fn::Sub": "origin-access-identity/cloudfront/${OriginAccessId}" 
} 
Смежные вопросы