小ネタです。
Redshift クラスタをリストアしたい要望があったので、専用のIAMロールと権限を付与したのですが、Permission Deniedになってしまったので、原因調査と解決までしたので記事にしました。
やりたかったこと
以下のコマンドでリストアするつもりでした。
$ aws redshift restore-from-cluster-snapshot \
--region ap-northeast-1 \
--cluster-identifier restore-redshift \
--iam-roles arn:aws:iam::123456789012:role/redshift-role \ # Redshift クラスタにIAMロールを付与
--snapshot-identifier rs:foo-redshift-2018-02-14-00-58-09 \
--port 5439 \
--no-allow-version-upgrade \
--cluster-subnet-group-name foo-subnet \
--publicly-accessible \
--cluster-parameter-group-name foo-paramter \
--vpc-security-group-ids sg-xxxxxxxx \
--automated-snapshot-retention-period 0 \
--node-type dc1.large \
--no-enhanced-vpc-routing
IAMロールには redshift:RestoreFromClusterSnapshot
のみを付与して実行したところ、
An error occurred (UnauthorizedOperation) when calling the RestoreFromClusterSnapshot operation: Access Denied. Please ensure that your IAM Permissions allow this operation.
とエラーになってしまいました。
IAM Permissions
だったので、IAMロールを付与するのに iam:PassRole
が必要なことに気づいて追加して再実行すると今度は
An error occurred (UnauthorizedOperation) when calling the RestoreFromClusterSnapshot operation: Access Denied. Please ensure that your IAM Permissions allow this operation.
となってしまいました。
RestoreFromClusterSnapshot
を許可しとるやないか!
散々調べたり検証した結果、以下のような権限で動作することが判明しました。
必要だったIAM権限
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"redshift:DescribeClusters",
"redshift:DescribeClusterSnapshots",
"redshift:RestoreFromClusterSnapshot",
"redshift:ModifyCluster*",
"redshift:DescribeClusterSubnetGroups",
"redshift:DescribeClusterSecurityGroups",
"redshift:DescribeClusterParameterGroups",
"ec2:DescribeAccountAttributes",
"ec2:DescribeAddresses",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeInternetGateways",
"ec2:DescribeVpcs",
"iam:PassRole"
],
"Resource": "*"
}
]
}
ハマったポイント
1. IAMロールを付与するので iam:PassRole
が必要(上記の通り)
2. VPC内にRedshiftクラスタをリストアするので、 VPCやSubnet、AZなどの権限も必要
3. RedshiftクラスタのParameterGroupなどを変更するので redshift:ModifyCluster
が必要
まとめ
Redshiftクラスタをリストアしようとしたときには権限に注意が必要でした。ドキュメントを探しても見つからなかったので同じところでハマっている人がいれば参考になれば幸いです。てか、ドキュメントに書いとけよとですよね・・・