AWS 特定のS3バケットへのアクセスのみ許可する

ポリシーでのアクセス許可を以下に設定

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::your-bucket-name",
        "arn:aws:s3:::your-bucket-name/*"
      ]
    }
  ]
}

参考

ポリシーでのアクセス許可の指定

既存のEC2インスタンスにIAMロールを割り当てる

ようやく既存のEC2インスタンスにIAMロールを割り当てることができるようになった。

新しくIAMロールを割り当てる

$ aws ec2 associate-iam-instance-profile --instance-id インスタンスID --iam-instance-profile Name=ロール名

結果

{
    "IamInstanceProfileAssociation": {
        "InstanceId": "yourInstanceId",
        "State": "associating",
        "AssociationId": "iip-assoc-07489a9421ef8d9a6",
        "IamInstanceProfile": {
            "Id": "AIPAJ2DEFUOROSIDJV7OS",
            "Arn": "arn:aws:iam::943601058350:instance-profile/myRole"
        }
    }
}

IAMロールを置き換える

差し替える場合は、まずIAMロールとEC2インスタンスのアソシエーションIDを取得する必要がある。

アソシエーションIDの取得

$ aws ec2 describe-iam-instance-profile-associations | jq '.IamInstanceProfileAssociations[] | select(.InstanceId == "インスタンスID") | .AssociationId'

IAMロールの置き換え

$ aws ec2 replace-iam-instance-profile-association --association-id アソシエーションID --iam-instance-profile Name=ロール名

結果

{
    "IamInstanceProfileAssociation": {
        "InstanceId": "yourInstanceId",
        "State": "associating",
        "AssociationId": "iip-assoc-0061ce7a881874983",
        "IamInstanceProfile": {
            "Id": "AIPAIDQS4HLWPEA6C2P4O",
            "Arn": "arn:aws:iam::943601058350:instance-profile/replaceRole"
        }
    }
}

参考

New! Attach an AWS IAM Role to an Existing Amazon EC2 Instance by Using the AWS CLI

EC2インスタンス作成時に気をつけること

IAMのロールはインスタンス作成後に割り当てることができないので、空のロールでも良いので割り当てておくとよい。 その他AWSサービスとの連携は、今後ないという場合はその必要はない。