无法从 Cloudformation 中的 EC2 实例访问 S3 -- 调用 HeadObject 操作时发生客户端错误 (301):永久移动

Kat*_*ang 3 amazon-s3 amazon-ec2 http-error aws-cloudformation amazon-iam

我正在尝试通过实例的 userdata 属性将文件从 S3 存储桶下载到实例。但是,我收到错误:

调用 HeadObject 操作时发生客户端错误 (301):永久移动。

我使用 IAM 角色、托管策略和实例配置文件来为实例提供对 s3 存储桶的访问权限:

    "Role": {
        "Type": "AWS::IAM::Role",
        "Properties": {
            "AssumeRolePolicyDocument": {
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Principal": {
                            "Service": [
                                "ec2.amazonaws.com",
                                "s3.amazonaws.com"
                            ]
                        },
                        "Action": [
                            "sts:AssumeRole"
                        ]
                    }
                ]
            },
            "Path": "/",
            "ManagedPolicyArns": [
                {
                    "Ref": "ManagedPolicy"
                }
            ]
        },
        "Metadata": {
            "AWS::CloudFormation::Designer": {
                "id": "069d4411-2718-400f-98dd-529bb95fd531"
            }
        }
    },
    "RolePolicy": {
        "Type": "AWS::IAM::Policy",
        "Properties": {
            "PolicyName": "S3Download",
            "PolicyDocument": {
                "Statement": [
                    {
                        "Action": [
                            "s3:*"
                        ],
                        "Effect": "Allow",
                        "Resource": "arn:aws:s3:::mybucket/*"
                    }
                ]
            },
            "Roles": [
                {
                    "Ref": "Role"
                }
            ]
        },
        "Metadata": {
            "AWS::CloudFormation::Designer": {
                "id": "babd8869-948c-4b8a-958d-b1bff9d3063b"
            }
        }
    },
    "InstanceProfile": {
        "Type": "AWS::IAM::InstanceProfile",
        "Properties": {
            "Path": "/",
            "Roles": [
                {
                    "Ref": "Role"
                }
            ]
        },
        "Metadata": {
            "AWS::CloudFormation::Designer": {
                "id": "890c4df0-5d25-4f2c-b81e-05a8b8ab37c4"
            }
        }
    },
Run Code Online (Sandbox Code Playgroud)

我尝试使用 userdata 属性中的这一行来下载文件:

aws s3 cp s3://mybucket/login.keytab 目的地目录/

对于出了什么问题有什么想法吗?如果我公开该文件,然后从命令行使用 wget,我可以成功下载该文件,但由于某种原因,使用 cp 时找不到存储桶/文件,并且该文件不可公开访问。

Joh*_*ein 5

Moved Permanently通常表示您正在被重定向到该对象的位置。这通常是因为请求被发送到位于不同区域的端点。

添加一个--region参数,其中区域与存储桶的区域相匹配。例如:

aws s3 cp s3://mybucket/login.keytab destination_directory/ --region ap-southeast-2
Run Code Online (Sandbox Code Playgroud)