クロスアカウントロールを使用して、AWSアカウント間でアクセス権限を委任する
特定のAWSリソースに、別のAWSアカウントからアクセスすることをクロスアカウントアクセスと言います。
特定のアカウントにあるリソースを別のアカウントのユーザーと共有します。このようにクロスアカウントアクセスを設定することで、お客様はアカウントごとに IAM ユーザーを作成する必要がなくなります。
IAM チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任
本ページでは、以下のページを参考に、クロスアカウントアクセスの方法を確認します。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html
構築する環境
2つのAWSアカウントを使用します。
1つ目のアカウントは2つのリソースを作成します。
1つ目はSSMパラメータストアにパラメータを作成します。
2つ目はIAMロールを作成します。
このIAMロールは、先述のSSMパラメータストアにアクセスするための権限を有しています。
2つ目のアカウントはこのIAMロールを引き受けます。
ロールを引き受けた後、SSMパラメータストアにアクセスできることを確認します。
環境構築用のCloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しました。
https://github.com/awstut-an-r/awstut-dva/tree/main/02/002
テンプレートファイルのポイント解説
(参考)SSMパラメータストア
Resources:
Parameter:
Type: AWS::SSM::Parameter
Properties:
Name: !Sub "${Prefix}-Parameter"
Type: String
Value: Test Parameter
Code language: YAML (yaml)
検証用のリソースとして、SSMパラメータを作成します。
特別な設定は行いません。
IAMロール
Resources:
SSMParameterRole:
Type: AWS::IAM::Role
DeletionPolicy: Delete
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
AWS: !Ref CrossAccountId
Policies:
- PolicyName: !Sub "${Prefix}-GetParameterPolicy"
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- ssm:DescribeParameters
Resource: "*"
- Effect: Allow
Action:
- ssm:GetParameter
Resource:
- !Sub "arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${Parameter}"
Code language: YAML (yaml)
ポイントは信頼ポリシーです。
PrincipalプロパティにクロスアカウントアクセスするアカウントのIDを指定します。
インラインポリシーでは、SSMパラメータストアへのアクセス権限を定義します。
こちらについては、以下のページを参考に設定しました。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-paramstore-access.html
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- SSMパラメータ:dva-02-002-Parameter
- IAMロール:dva-02-002-IAMStack-3A259XLV4A28-SSMParameterRole-1E0267AH90Z9O
AWS Management Consoleから各リソースを確認します。
SSMパラメータを確認します。
確かにパラメータが作成されています。
IAMロールを確認します。
権限を見ると、先述のSSMパラメータにアクセスするための権限が設定されていることがわかります。
信頼関係を見ると、クロスアカウントアクセスするアカウントのID(のrootユーザ)がプリンシパルとして設定されています。
動作確認
準備が整いましたので、クロスアカウントアクセスします。
クロスアカウントアクセスするアカウントで、マネージメントコンソールを開き、「Switch role」を押下します。
引き受けるロールの情報を入力し、「Switch Role」を押下します。
正常にロールが引き受けられますと、右上にそのロールが表示されます。
試しにEC2のページに開きます。
全ての項目でエラーが表示されています。
現在引き受けているロールでは、EC2に関する権限は許可されていないためです。
改めてSSMパラメータストアを確認します。
先ほど確認したパラメータが表示されました。
詳細を確認します。
パラメータの値についても確認できます。
このようにクロスアカウントロールを引き受けることによって、別アカウントのリソースにアクセスすることができます。
まとめ
クロスアカウントロールを使用して、AWSアカウント間でアクセス権限を委任する方法を確認しました。