2013-12-17 39 views
15

Tôi đang nghiên cứu tạo AWS của nhóm và phân phối bằng cách sử dụng tập lệnh. Tôi đã tạo một tập lệnh và chạy tập lệnh mẫu ngăn xếp trong bảng điều khiển tạo đám mây AWS.AWS - Kịch bản tạo đám mây Kịch bản để tạo thùng S3 và Phân phối

Tôi đang tạo bucketpolicy cho thùng S3 bằng cách sử dụng tập lệnh và ID chuẩn. Khi tôi tạo chính sách nhóm, tôi muốn gán chính sách đó cho "OriginAccessIdentity" động trong tập lệnh. Tôi muốn thêm id được tạo từ chính sách nhóm vào thuộc tính "OriginAccessIdentity".

Làm thế nào để đạt được chức năng này?

Script:

{ 
    "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

Sử dụng kịch bản của nó không khuyến khích để tạo một người dùng OAI trong việc hình thành đám mây , lý do có thể mất ít thời gian để tạo người dùng trên đám mây. Vì vậy, chúng tôi đang tạo người dùng OAI bằng cách sử dụng mã .NET, sau đó sử dụng người dùng OAI trong tập lệnh. Vui lòng cho tôi biết nếu có giải pháp nào khác tốt hơn để tạo người dùng OAI. –

+0

tham chiếu url để tạo OAI bằng mã .NET. http://irfanshirur.blogspot.in/2014/01/create-oai-and-canonical-user-using-net.html –

Trả lời

6

Một xứ Truy cập nhận dạng không thể được tạo ra với CloudFormation. Tài nguyên CloudFront duy nhất có sẵn thông qua Cloudformation là tài nguyên AWS::CloudFront::Distribution.

Bạn có thể tránh khó mã hóa tham chiếu đến một OAI trong mẫu của bạn bằng cách sử dụng tham số để chuyển vào một OAI hiện có khi ngăn xếp của bạn được tạo. Sau đó, bạn có thể sử dụng thông số này làm giá trị cho OriginAccessIdentity trong loại S3Origin được liên kết với khóa S3OriginConfig.

Đây không phải là lý tưởng, nhưng nó cho phép bạn làm cho các mẫu của bạn trở nên chung chung hơn.

2

Kể từ ngày 2 tháng 11 năm 2017 CloudFormation hỗ trợ điều này bằng tài nguyên AWS :: CloudFront :: CloudFrontOriginAccessIdentity.

Với một nguồn tài nguyên nguồn gốc sắc truy cập định nghĩa là:

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

bạn có thể tham khảo nó trong cấu hình phân phối với:

"OriginAccessIdentity" : { 
    "Fn::Sub": "origin-access-identity/cloudfront/${OriginAccessId}" 
} 
Các vấn đề liên quan