ให้สิทธิ์การอ่านแบบ EC2 IAM ในการเข้าถึง S3 bucket


10

ฉันมีแอพ AWS Elastic Beanstalk Rails ที่ฉันกำหนดค่าผ่านสคริปต์การตั้งค่าเพื่อดึงไฟล์จาก S3 bucket เมื่อฉันเริ่มแอปพลิเคชันฉันยังคงได้รับข้อผิดพลาดต่อไปนี้ในบันทึก ( เปลี่ยนชื่อถังเพื่อความปลอดภัย ):

Failed to retrieve https://s3.amazonaws.com/my.bucket/bootstrap.sh: HTTP Error 403 : <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message>

ไฟล์กำหนดค่า:

packages:
  yum:
    git: []

files:
  /opt/elasticbeanstalk/hooks/appdeploy/pre/01a_bootstrap.sh:
    mode: "00755"
    owner: root
    group: root
    source: https://s3.amazonaws.com/my.bucket/bootstrap.sh

สภาวะแวดล้อม Elastic Beanstalk ถูกตั้งค่าด้วยaws-elasticbeanstalk-ec2-roleบทบาท IAM เนื่องจากเป็นบทบาทอินสแตนซ์ บทบาทนี้มีนโยบายต่อไปนี้:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": "arn:aws:s3:::my.bucket/*"
    }
  ]
}

และ S3 bucket มีนโยบายต่อไปนี้:

{
"Version": "2008-10-17",
"Statement": [
    {
        "Sid": "Stmt1371012493903",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::<account #>:role/aws-elasticbeanstalk-ec2-role"
        },
        "Action": [
            "s3:List*",
            "s3:Get*"
        ],
        "Resource": "arn:aws:s3:::my.bucket/*"
    }
]
}

ฉันต้องเปลี่ยนอะไรเพื่อให้อินสแตนซ์ EC2 ของฉันเข้าถึงที่ฝากข้อมูล S3 ของฉัน

คำตอบ:


6

จาก insctance EC2 ของคุณคุณจะต้องดึงข้อมูลประจำตัวชั่วคราวในข้อมูลเมตาของอินสแตนซ์:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<your-iam-role-name>

จากนั้นคุณจะต้องใช้การเข้าถึงและรหัสลับในการเข้าถึง S3 S3 ของคุณ


1
เมื่อคุณทำสิ่งนี้ผ่าน AWS SDK สำหรับภาษาเฉพาะจากแอปพลิเคชัน SDK จะดำเนินการดูแลภายในเพื่อรับข้อมูลรับรองชั่วคราวจากนั้นรีเฟรชตามช่วงเวลาที่กำหนด
Whokares

2
คุณจะใช้ access และ secret key เพื่อเข้าถึง S3 bucket ได้อย่างไร? คุณมีตัวอย่างหรือไม่ ไชโย
Céline Aussourd

0

หากเป็นการเข้าถึงแบบข้ามบัญชีตรวจสอบว่าไม่เกี่ยวข้องกับส่วนหัว ACL ดังที่กล่าวไว้ที่นี่: https://stackoverflow.com/a/34055538/1736679 (ข้อมูลเพิ่มเติมในหัวข้อปัญหานี้: https://github.com/aws/aws -cli / ประเด็น / 1674 )

ตรวจสอบสภาพแวดล้อม / ผู้ใช้ที่คุณกำลังเรียกใช้อีกครั้งเพื่อดูว่าไม่มีคีย์แทนที่ (1AWS_ACCESS_KEY1 ฯลฯ ) /etc/environmentหรือ~/.aws/credentials

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.