2017-09-23 27 views
0

我有一個CloudFormation腳本,它使用AWS::CloudFormation::Init部分從S3拒絕訪問(403)失敗的S3桶中下載文件。即使「aws s3 cp」能夠正常工作,cfn-init仍然無法下載S3文件

我已經使用AWS::IAM::InstanceProfile向機器添加了名爲s3access的IAM角色。與aws s3作品下載文件:

[[email protected] ~]$ aws s3 cp s3://my-bucket/test-file 
.download: s3://my-bucket/test-file to ./test-file   

cfn-init失敗:

[[email protected] ~]$ sudo /opt/aws/bin/cfn-init -v --stack test --resource EC2 --region us-east-2 
Error occurred during build: Failed to retrieve https://s3.us-east-2.amazonaws.com/my-bucket/test-file: HTTP Error 403 :

我想明確地設置IAM作用,但仍失敗:

[[email protected] ~]$ sudo /opt/aws/bin/cfn-init -v --stack test --resource EC2 --region us-east-2 --role=s3access 
AccessDenied: User: arn:aws:sts::196375698259:assumed-role/s3access/i-044499612c92b50f5 is not authorized to perform: cloudformation:DescribeStackResource on resource: arn:aws:cloudformation:us-east-2:196375698259:stack/test/*

我想使用的aws s3 cp s3://my-bucket/test-file ./直接來自用戶數據,但我想知道爲什麼AWS::CloudFormation::Init未能承擔分配給EC2實例的角色。

我發現只有一個類似的問題 - How can I access protected S3 files in a CFN script?,但是解決方案是應用IAM角色,我已經完成並且cfn-init仍然失敗。

+0

如果您向我們展示您的模板會更容易 – Raniz

+1

我發現使用cfn-init幾乎沒有什麼優勢。您可以輕鬆地將您的aws s3複製邏輯放入CloudFormation的userData中,併爲您的EC2實例提供與s3讀取權限關聯的角色/策略權限,這樣可以很好地工作。 –

回答

0

有一些方法可以爲雲信息實例提供IAM角色。

  • 你可以把你IAM角色的確定爲cloudformation模板,例如在你的UserData。但是,這會對您的IAM造成一些機密問題。
  • 您可以將參數放在堆棧上,因此每次創建堆棧時都可以指定角色。這對測試堆棧並不是很愉快,需要頻繁創建一個新的堆棧。
  • 最後一個是啓動一個新實例並添加您的角色,然後創建該實例的AMI。使用此AMI創建cloudformation堆棧實例。通過使用這個選項,您可以確保您的s3命令在實例中首先工作,並且您不必處理參數和機密問題。