IICS CDIでAssume Roleを用いて異なるAWSアカウントのS3バケットに書き込んでみた。

Informatica Intelligent Cloud Services(IICS) CDIではAssume Roleを用いてバケットの所有者が異なるクロスアカウントのS3バケットへの参照・書き込みが可能です。
2023.02.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

好物はインフラとフロントエンドのかじわらゆたかです。 Informatica Intelligent Cloud Services(IICS) CDIで異なるAWSアカウントのS3バケットに書き込んで見たいと思います。 もちろんAccessKeyとSecretAccessKeyを払い出すというやり方はありますが、AWSのベストプラクティスに基づきIAM RoleとAssume Roleを用いた構成になります。

構成図

構成は上記となります。 SecureAgentが入っているAWSアカウントとそれとは別のAWSアカウントのS3にAssume Roleをして参照・書き込みをしたいと思います。 Assume元のアカウントをSource Account、Assume先のアカウントをTarget Accountと呼んでいます。

Target Account側の設定 - 1

Target Account側のIAM RoleにはS3の操作をできるPolicyを付与します。 クロスアカウントの設定となるので、操作対象のバケットのみを操作できるポリシーが良いかと思います。

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

上記で作ったIAM Roleを仮に以下とします。

arn:aws:iam::210987654321:role/target-role

Source Account側の設定

SecureAgentを入れているEC2に以下のPolicyを追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::210987654321:role/target-role"
        }
    ]
}

上記で作ったIAM Roleを仮に以下とします。

arn:aws:iam::123456789012:role/source-role

Target Account側の設定 - 2

Target Account側にSource Account側のIAM RoleからAssumeできるように先程作ったIAM Roleの信頼関係に以下を追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/source-role"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

IICS CDIの設定

IICS CDI上から接続を追加し、タイプでAmazon S3 v2を選択します。 ランタイム環境ではSource RoleがアタッチされているSecureAgent環境を選択し、IAM Role ARN:にTarget AccountのIAM RoleのARNを入力します。 Use EC2 Role to Assume Roleにチェックを入れ、Folder Pathには対向のバケット名を入れておきRegionは必要に応じて変更します。

正しく設定されていれば、テスト接続が成功し、異なるAWSアカウントのS3バケットにアクセスが可能となります。

結論

このように設定することでSecureAgentが入っているEC2のAWSアカウントとは異なるAWSアカウントにAssume RoleしてS3にアクセスすることができます。

AccessKeyID / SecretAccessKey の組み合わせによるアクセス自体は非常に容易ではありますが、逆に漏洩時の影響や対応等を考えると、異なるAWS アカウントへのアクセスはなおさらAssume Roleを用いたアクセスで行いたいものです。