クロスアカウントでのリソース共有
こんにちは!
私の職場ではRAMで複数のAWSアカウントでTransitGatewayを共有しています。
このRAMでの共有の設定をいちいちGUIぽちぽちしているのが地味にめんどくさくて Lambdaで自動化できないか自宅で疑似環境環境作って試してみました。 (TransitGatewayはコストかかるので以下ではサブネット共有にしています)
そもそものクロスアカウントでリソース共有するところでつまずいたので 備忘的に残します。
結論
RAMで異なるアカウント間でリソース共有する際は、以下の設定を行う
1. AWS Organizationでリソースを共有したいアカウントを招待
2. AWS Organizationの設定でAWS のサービスに対する信頼されたアクセス
のAWS RAMへのアクセスを有効化
Lambdaで試していたコード
import json import boto3 client = boto3.client('ram') def lambda_handler(event, context): # TODO implement response = client.associate_resource_share( resourceShareArn='arn:aws:ram:ap-northeast-1:123456789/resource-share/hogehogehoge', principals=[ '123456789-account-id', ], ) return response
エラーメッセージ
An error occurred (InvalidParameterException) when calling the AssociateResourceShare operation: The resource you are attempting to share can only be shared within your AWS Organization. This error may also occur if you have not enabled sharing with your AWS organization, or that onboarding process is still in progress.: InvalidParameterException
対処
AWS Organizationでリソースを共有したいアカウントを招待 アカウントの追加から共有したいアカウントの招待を行います(特に難しいことはないので後続処理は省略します)
AWS Organizationの設定で
AWS のサービスに対する信頼されたアクセス
のAWS RAMへのアクセスを有効化
はまったところ
2を実行するとAWS RAMの設定画面でも以下のように設定がグレーアウト(有効化)されるのですが
私はなぜかうまく連動されませんでした。
仕方ないので手動でチェックボックスにチェックを入れて設定の保存
を実施
結果
無事にLambdaの処理が通ってくれました!
RAMの共有プリンシパルにも追加されています
あとは共有先で共有の承認をしないといけないのですが、一旦今回はここまでにします。